java的clone

一、clone的用法:

package chatRoom.F5;class Person implements Cloneable{//1.public String name;public Person(String name) {this.name = name;}//2.protected Person clone() throws CloneNotSupportedException {return (Person)super.clone();//重写Object类的clone}
}//clone():  复制对象。
public class CloneDemo {public static void main(String[] args) throws CloneNotSupportedException {Person p1=new Person("zs");Person p2=p1.clone();//p2表示复制出来的第二份儿对象}
}

二、clone的浅克隆:

如果具有引用类型成员变量的类,单纯的重写了clone方法。 则调用clone方法进行对象克隆时就是浅克隆(只是克隆了此类对象,内部的引用类型属性指向的对象没有被克隆)。

package chatRoom.F5;class Person implements Cloneable{//1.public String name;public Person(String name) {this.name = name;}//2.protected Person clone() throws CloneNotSupportedException {return (Person)super.clone();//重写Object类的clone}
}class ClassRoom implements Cloneable{int id;Person p1;protected ClassRoom clone() throws CloneNotSupportedException {return (ClassRoom)super.clone();//浅克隆}
}public class CloneDemo {public static void main(String[] args) throws CloneNotSupportedException {ClassRoom c=new ClassRoom();//第一个ClassRoomc.p1=new Person("赵公明");//ClassRoom复制时,没有复制ClassRoom里边的Person对象ClassRoom d=c.clone();//第2个ClassRoomSystem.out.println(c.p1 ==  d.p1);}
}

三、clone的深克隆:

如果具有引用类型成员变量的类,此时若需要进行深克隆,则需要重写了clone方法,并在clone方法中调用引用类型成员变量的clone方法对引用类型变量指向的对象都进行克隆。 

 package chatRoom.F5;class Person implements Cloneable{//1.public String name;public Person(String name) {this.name = name;}//2.protected Person clone() throws CloneNotSupportedException {return (Person)super.clone();//重写Object类的clone}
}class ClassRoom implements Cloneable{int id;Person p1;protected ClassRoom clone() throws CloneNotSupportedException {//改进:实现深克隆//方式:p1也调用cloneClassRoom c=(ClassRoom)super.clone();c.p1=p1.clone();return c;//浅克隆//return  (ClassRoom)super.clone();}
}public class CloneDemo {public static void main(String[] args) throws CloneNotSupportedException {ClassRoom c=new ClassRoom();//第一个ClassRoomc.p1=new Person("赵公明");//ClassRoom复制时,没有复制ClassRoom里边的Person对象ClassRoom d=c.clone();//第2个ClassRoom//c中的p1对象的地址==d中的p1对象的地址System.out.println(c.p1 ==  d.p1);//false}
}

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

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

相关文章

媒体有入口,发稿有入口 是什么意思?

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 媒体有入口,发稿有入口是指在新闻媒体发稿时,稿件可以通过一定的路径被访问和浏览。具体来说,有入口的新闻稿件可以通过点击链接,逐步深入…

芯片验证分享1 —— 开篇及名词解释

大家好,我是谷公子的藏经阁,今天和大家很高兴能和大家分享的是芯片验证中的一些内容,希望对大家的日常工作有所帮助,如果这些内容有帮助到大家的话,那么此次的分享就很值得。另外,对于这个课题,…

ChatTTS增强版,增强音质、批量处理、固定音色、支持长文本

大家好,最近ChatTTS文字生成语音项目挺火。只需要输入一段文字,就可以生成一段非常逼真的声音。声音的效果非常不错。它支持英文和中文两种语言。我在原版的基础上做了一些改动,整合包分享给大家。 功能介绍 除了基础的文本生成音频功能以外…

实验10 RIP协议配置

实验10 RIP协议配置 一、原理描述二、RIPv1配置(一)实验目的(二)实验内容(三)实验配置(四)实验步骤 三、 RIPv2配置(一)实验目的(二)实…

IT闲谈——什么是容器?

目录 什么是容器一、容器的起源与发展二、目前使用较多的容器三、容器能用来做什么四、容器的应用场景 什么是容器 随着云计算和微服务的兴起,容器技术逐渐成为IT行业的热门话题。容器,简而言之,是一种轻量级的、可移植的、独立的软件包&…

【Python】轻松打包:CentOS7上使用PyInstaller将Shell脚本转换为可执行文件的完美指南

【Python】轻松打包:CentOS7上使用PyInstaller将Shell脚本转换为可执行文件的完美指南 大家好 我是寸铁👊 总结了一篇【Python】轻松打包:CentOS7上使用PyInstaller将Shell脚本转换为可执行文件的完美指南✨ 喜欢的小伙伴可以点点关注 &#…

【CXL协议-控制和状态寄存器(8)】

8.0 控制和状态寄存器 Compute Express Link 设备控制和状态寄存器被映射到单独的空间:配置空间和内存映射空间。配置空间寄存器使用配置读取和配置写入进行访问。内存映射寄存器使用内存读取和内存写入进行访问。表 123 总结了本章中定义的寄存器位的属性。除非另…

人员身份级的数据中心机房作业随工

电信运营商的数据中心机房作为承载各类业务系统的物理基础,其运维安全直接关系到业务的连续性和数据的安全性。传统的机房管理方式依赖人工审核和监督,存在效率低下、安全隐患多等问题。因此,通过综合运用物联网、大数据分析和人工智能技术&a…

机器学习AI大模型的开源与闭源:哪个更好?

文章目录 前言一、开源AI模型1.1 开源的优点1.2 开源的缺点 二、闭源AI模型2.1 闭源的优点2.2 闭源的缺点 三、开源与闭源的平衡3.1 开源与闭源结合的案例3.2 开源与闭源的战略选择 小结 前言 在过去的几年里,人工智能(AI)和机器学习&#xf…

Docker 基础使用(3) 存储卷

文章目录 存储卷的含义存储卷的分类存储卷的作用存储卷的使用存储卷实际使用案例 ---- MySQL灾难恢复存储卷的局限 Docker 基础使用(0)基础认识 Docker 基础使用 (1) 使用流程概览 Docker 基础使用(2) 镜像与容器 Docker 基础使用…

LeetCode24_两两交换链表中的节点

. - 力扣(LeetCode) 一、题目: 二、模拟 1. 第一步 2. 第二步:current next.next 3. 第三步: next.next current 4. 第四步:pre.next next; 到这里为止实现了两个节点的交换 5. 第五步:pre current;…

【机器学习】朴素贝叶斯算法及其应用探索

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 朴素贝叶斯算法及其应用探索引言1. 朴素贝叶斯基本概念1.1 贝叶斯定理回顾1.2 朴…

基于 Spring Boot 博客系统开发(十三)

基于 Spring Boot 博客系统开发(十三) 本系统是简易的个人博客系统开发,为了更加熟练地掌握 SprIng Boot 框架及相关技术的使用。🌿🌿🌿 基于 Spring Boot 博客系统开发(十二)&…

【Linux-Uboot】

Linux-Uboot ■ Uboot使用 串口软件(超级终端)接受文件■ ■ Uboot使用 串口软件(超级终端)接受文件 添加链接描述 ■

NGINX之location和rewrite

一.NGINX常用的正则表达式 二.Location location作用:对访问的路径做访问控制或者代理转发 1.location 常用的匹配规则: 进行普通字符精确匹配,也就是完全匹配^~ / 表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其它 …

JVM学习-监控工具(一)

使用数据说明问题,使用知识分析问题,使用工具处理问题 无监控,不调优! 命令行工具 在JDK安装目录下,可以查看到相应的命令行工具,如下图 jps(Java Process Status) 显示指定系统内所有的Hotpot虚拟机…

【自然语言处理】文本情感分析

文本情感分析 1 任务目标 1.1 案例简介 情感分析旨在挖掘文本中的主观信息,它是自然语言处理中的经典任务。在本次任务中,我们将在影评文本数据集(Rotten Tomato)上进行情感分析,通过实现课堂讲授的模型方法&#x…

OpenStack无效数据清空脚本

​​​​​​​介绍 在以openstack为底层开发的一些项目中,常常会遇到项目中数据与openstack数据不同步的问题,为了简化清空无效数据的繁琐,提供以下脚本便于运维操作。 环境变量 [rootcloud ~]# cat admin.sh export OS_USERNAMEadmin ex…

蓝图collapseNodes很有用

学到了,选中N个节点后,再右键collapseNode,可以使代码很清晰,双击后可以看到相应的代码,具有层次感。

【python科学文献计量】关于中国知网检索策略的验证,以事故伤害严重程度检索为例

关于中国知网检索策略的验证,以事故伤害严重程度检索为例 1 背景2 文献下载3 数据处理1 背景 由于要进行相关研究内容的综述,需要了解当前我国对于事故伤害严重程度的研究现状,采用国内较为知名的检索网站(中国知网)进行文献数据集检索 由于最近知网出bug,检索的结果在…