Java进阶学习笔记24——Object类

Object类:

Object类是Java中所有类的祖宗类,因此,Java中所有类的对象都可以直接使用Object类中提供的一些方法。

所有类都是Object类的子孙类。

API文档:

 Object类的成员方法:

Object类的常见方法:

 

Student类:

package cn.ensource.d13_object;import java.util.Objects;public class Student {     // 默认继承Object类private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}// 重写equals方法,比较两个对象的内容一样,就返回true@Overridepublic boolean equals(Object obj) {// 1. 两个对象的地址一样,直接返回trueif(this == obj) return true;// 2. 判断Obj是null,直接返回false// 比较者类型跟被比较者类型不一样,例如:Student.class != Pig.classif(obj == null || getClass() != obj.getClass()) return false;// 3. obj不是null,obj一定是学生类型的对象,开始比较内容了// 强制类型转换到StudentStudent student = (Student) obj;return Objects.equals(this.name, student.name) && this.age == student.age;}
}

测试类:

package cn.ensource.d13_object;public class Test {public static void main(String[] args) {// 目标:掌握Object类的常用方法Student s1 = new Student("赵敏", 23);System.out.println(s1);Student s2 = new Student("赵敏", 23);System.out.println(s2.equals(s1));   // 默认比较两个对象的地址,String类是帮我们重写了equals方法System.out.println(s1 == s2);        // 默认比较两个对象的地址}
}

clone方法:对象克隆:

当某个对象调用这个方法的时候,这个方法会复制一个一模一样的新对象返回。

这个新对象:里面的内容一样的,但是地址不一样。

package cn.ensource.d13_object;// Cloneable标志接口,理解是一种规则。
public class User implements Cloneable {private int id;private String username;private String password;private double[] scores;public User() {}public User(int id, String username, String password, double[] scores) {this.id = id;this.username = username;this.password = password;this.scores = scores;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public double[] getScores() {return scores;}public void setScores(double[] scores) {this.scores = scores;}@Overrideprotected Object clone() throws CloneNotSupportedException {// super 去调用父类Object中的clone方法return super.clone();}
}

package cn.ensource.d13_object;public class Test2 {public static void main(String[] args) throws CloneNotSupportedException {// 目标;掌握Object类的对象克隆方法// 1. protected Object clone(): 对象克隆User user1 = new User(1, "chang", "123456", new double[]{99.0, 99.5});System.out.println(user1.getId());System.out.println(user1.getUsername());System.out.println(user1.getPassword());System.out.println(user1.getScores());System.out.println("-----------");User user2 = (User) user1.clone();System.out.println(user2.getId());System.out.println(user2.getUsername());System.out.println(user2.getPassword());System.out.println(user2.getScores());}
}

protected只能在这个lang包下,访问这个clone方法。或者是在Object的子类中才能调用这个方法。

protected 是指可以在子类中访问,而不是在子类对象中访问。

User是Object的不同包的子类,可以在User类中访问clone,但是不能在Test类中访问。

protected修饰的只能在本类,同一包下,继承它的子类中使用,只能在User这个类中使用clone,在new出来的对象中确实使用不了,如果一定要使用,重写或者在方法中使用。

protected只能自己的儿子用,不让让儿子的朋友以儿子的名义用。

实现对象克隆方法:

1)方法重写clone();

2)实现Cloneable接口;

3)main函数throw 异常处理;

输出结果:

1
chang
123456
[D@3b07d329
-----------
1
chang
123456
[D@3b07d329

getscores()函数返回的是数组的地址,克隆的对象中的地址是一样的,都是指向堆内存中的数组对象,所以地址相同。

浅克隆:

拷出来的新对象,与原来对象中的数据是一模一样的(引用类型拷贝的只是地址。

深克隆:

对象中基本类型的数据直接拷贝。

对象中的字符串数据拷贝的还是地址。String是放在堆内存的常量池中。

对象中还包含的其他对象,不会拷贝地址,会创建新对象。

深克隆的实现:

对数组对象进行克隆。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/841521.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Arthas反编译与重新加载class

一、背景 因为其他研发部门同事给的产品jar包存在一个问题,就是http底层的超时时间默认为60s,但是最近调用外部接口同步数据,这个数据量太大导致超时超过60s,每次同步都不成功。但是客户目前对此情况特别不满意,需要紧…

【路径规划】基于飞蛾搜索算法实现复杂城市地形下无人机避障三维航迹规划

研究背景 复杂城市地形下无人机避障三维航迹规划是无人机技术领域的一个重要研究方向。无人机在城市环境中的广泛应用,如快递配送、城市监测和搜救等任务,对其航迹规划和避障能力提出了挑战。 研究背景包括以下方面: 无人机的快速发展:无人机技术在近年来得到了迅猛发展…

勒索病毒的策略与建议

随着网络技术的快速发展,勒索病毒攻击成为全球范围内日益严重的网络安全威胁。勒索病毒通过加密用户文件或锁定系统来勒索赎金,给个人和企业带来了巨大的损失。因此,了解如何应对勒索病毒攻击至关重要。本文将概述一些有效的防范措施和应对策…

2024电工杯数学建模B题完整论文讲解(含每一问python代码+数据)

大家好呀,从发布赛题一直到现在,总算完成了2024电工杯数学建模B题大学生平衡膳食食谱的优化设计及评价完整的成品论文。 本论文可以保证原创,保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。 …

Linux网络编程:HTTPS协议

目录 1.预备知识 1.1.加密和解密 1.2.常见加密方式 1.2.1.对称加密 1.2.2.非对称加密 ​编辑 1.3.数据摘要(数据指纹)和数据签名 1.4.证书 1.4.1.CA认证 1.4.2.证书和数字签名 2.HTTPS协议 2.1.自行设计HTTPS加密方案 2.1.1.只使用对称加密 …

uniapp使用uni.chooseImage选择图片后对其是否符合所需的图片大小和类型进行校验

uni.chooseImage的返回值在H5平台和其他平台的返回值有所差异,具体差异看下图 根据图片可以看出要想判断上传的文件类型是不能直接使用type进行判断的,所以我使用截取字符串的形式来判断,当前上传图片的后缀名是否符合所需要求。 要求&#…

驱动与系统学习网址

DRM(Direct Rendering Manager)学习简介-CSDN博客 Android Qcom Display学习(零)-CSDN博客 https://blog.csdn.net/hexiaolong2009/category_9705063.htmlhttps://blog.csdn.net/hexiaolong2009/category_9705063.htmlRender Hell —— 史上最通俗易懂…

区间合并-leetcode合并石头的最低成本-XMUOJ元素共鸣:深层次的唤醒

题目 思路 话不多说,直接上代码 附上INT_MAX和INT_MIN 【C】详解 INT_MAX 和 INT_MIN(INT_MAX 和 INT_MIN是什么?它们的用途是什么?如何防止溢出?)_c int max-CSDN博客 代码 /* leetcode合并石头的最低…

clone方法总结Java

Java中Object类当中有许多方法,如图所示: clone方法就是其中一种,分为浅拷贝,深拷贝举一个例子: 浅拷贝: 在Person类当中右键鼠标然后,选中Generate: 然后重写clone方法 protecte…

电赛之路:历年试题剖析、实战经验分享与代码资源宝典

电赛之路:历年试题剖析、实战经验分享与代码资源宝典 一、电赛历年试题剖析2018年试题回顾:智能小车2019年试题精选:智能家居系统 二、实战经验分享1. 团队协作的艺术2. 时间管理与迭代开发3. 代码与文档规范 三、代码程序资源推荐1. GitHub电…

PTA 6-4 配对问题

许多大学生报名参与大运会志愿者工作。其中运动场引导员需要男女生组队,每组一名男生加一名女生,男生和女生各自排成一队,依次从男队和女队队头各出一人配成小组,若两队初始人数不同,则较长那一队未配对者调到其他志愿…

Vue3学习-Pinia 集中式状态管理工具

安装 Pinia npm i piniaPinia 集中式状态管理工具官网 传送门 引入 Pinia //引入 import { createPinia } from pinia const pinia createPinia() const app createApp(App); app.use(pinia);使用 // store 注册 import { defineStore } from "pinia"; export …

python弹出文件打开和保存的选择框

tkinter.filedialog 模块中的 askopenfilename 函数和 asksaveasfilename 函数来显示文件打开和保存的选择框。 这两个函数的作用都是返回一个文件名。如果选择了一个文件,则会返回文件的绝对路径,如果取消了选择,则返回空字符串 前者用来读时…

赶紧收藏!2024 年最常见 20道 Redis面试题(八)

上一篇地址:赶紧收藏!2024 年最常见 20道 Redis面试题(七)-CSDN博客 十五、一个Redis实例最多能存放多少的keys? Redis实例能存放的键(keys)的数量主要受限于以下几个因素: 物理内…

android studio的gradle设置和镜像

新建的应用和其他的应用gradle版本各不一致,想着使用本地已经存在的版本,不知道为啥一直要去下载 现在先找一下镜像源: 官网地址:https://services.gradle.org/distributions/ 腾讯镜像 Gradle下载地址:https://mirro…

【MySQL精通之路】SQL优化(1)-查询优化(5)-引擎条件下推

1 介绍 这种优化提高了无索引列和常量之间直接比较的效率。 在这种情况下,条件会“向下推”到存储引擎进行评估。此优化只能由NDB存储引擎使用。 对于NDB集群,这种优化可以消除在集群的数据节点和发布查询的MySQL服务器之间通过网络发送不匹配行的操作…

【微服务】springboot 构建镜像多种模式使用详解

目录 一、前言 二、微服务常用的镜像构建方案 3.1 使用Dockerfile 3.2 使用docker plugin插件 3.3 使用docker compose 编排文件 三、环境准备 3.1 服务器 3.2 安装JDK环境 3.2.1 创建目录 3.2.2 下载安装包 3.2.3 配置环境变量 2.2.4 查看java版本 3.3 安装maven …

pyqt 浮动窗口QDockwidget

pyqt 浮动窗口QDockwidget QDockwidget效果代码 QDockwidget QDockWidget 是 PyQt中的一个控件,它提供了一个可以停靠在主窗口边缘或者浮动在屏幕上的窗口小部件(widget)。QDockWidget 允许用户自定义其界面,并提供了灵活的停靠和…

Keras实现SegNet

我真服了原来我之前用tf复现SegNet给复现错了 在网上试了多个版本代码,折腾了好久,现在终于复现对了,代码也跑通了 SegNet的架构比较老了,这几年都没人更新代码了,我这里算是提供一个最近能跑通的版本的代码吧 tf版本…

Elasticsearch集群许可证过期问题解决方法汇总

最近在使用elasticsearch的过程中,使用elastic-head进行可视化展示集群的状态和信息,从2024年5月18日突然elastic-head无法现在集群的状态界面啦,elasticsearch集群状态是正常,命令如下: curl -X GET "localhost:9200/_cluster/health?pretty" 在google页面上通过…