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…

【微服务】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 允许用户自定义其界面,并提供了灵活的停靠和…

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

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

引流500+创业粉,抖音口播工具

在抖音平台运营一个专注于口播的工具号,旨在集结超过500位热衷于创业的粉丝,这需要精心筹划的内容策略和周到的运营计划。首先,明确你的口播工具号所专注的领域,无论是分享创业经验、财务管理技巧还是案例分析,确保你所…

【电子元件】TL431 电压基准

TL431(C23892)是一种常用的可调节精密电压基准和电压调节器。它广泛应用于电源管理、精密参考电压和稳压电路等领域。以下是TL431的一些关键特点和使用方法: 关键特点 可调输出电压:TL431的输出电压可以通过外部电阻网络在2.495V到36V范围内调整。精度高…

淘宝x5sec

声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!wx a15018601872 本文章未…

【数据结构(邓俊辉)学习笔记】二叉树03——重构

0 .概述 介绍下二叉树重构 1. 遍历序列 任何一棵二叉树我们都可以导出先序、中序、后序遍历序列。这三个序列的长度相同,他们都是由树中的所有节点依照相应的遍历策略所确定的次序,依次排列而成。 若已知某棵树的遍历序列是否可以忠实地还原出这棵树…

ic基础|时钟篇05:芯片中buffer到底是干嘛的?一文带你了解buffer的作用

大家好,我是数字小熊饼干,一个练习时长两年半的ic打工人。我在两年前通过自学跨行社招加入了IC行业。现在我打算将这两年的工作经验和当初面试时最常问的一些问题进行总结,并通过汇总成文章的形式进行输出,相信无论你是在职的还是…

图片AI高效生成惊艳之作,一键解锁无限创意,轻松打造概念艺术新纪元!

在数字化时代,图片已经成为我们表达创意、传递信息的重要载体。然而,传统的图片生成方式往往耗时耗力,无法满足我们对于高效、创意的需求。幸运的是,现在有了图片AI,它以其高效、智能的特点,为我们带来了全…

微服务-系统架构

微服务: 系统架构的演变 单一应用架构 早期的互联网应用架构,大量应用服务 功能 集中在一个包里,把大量的应用打包为一个jar包,部署在一台服务器,例如tomcat上部署Javaweb项目 缺点:耦合度高,一台服务器…

Point-Nerf 理论笔记和理解

文章目录 什么是point nerf 和Nerf 有什么区别Point Nerf 核心结构有哪些?什么是point-based radiance field? 点云位置以及置信度是怎么来Point pruning 和 Point Growing 什么是point nerf 和Nerf 有什么区别 基本的nerf 是通过过拟合MLP来完成任意视角场景的重…

Linux(六)

Linux(六) 自定义头文件自定义头文件中写什么如何引入头文件条件编译条件编译作用 gcc工作原理Make 工作管理器什么是Make什么是Makefile/makefileMakefile假目标Makefile中的变量自定义变量预定义变量自动变量 Makefile中变量展开方式递归展开方式简单展…