版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目 录1. 对象的克隆- 1 -1.1. 浅克隆- 1 -1.2. 深克隆- 1 -2. 克隆实例- 1 -2.1. 浅克隆实例- 1 -2.2. 深克隆实例- 3 -2.3. 常见问题- 5 -1. 对象的克隆Java实现对象克隆的步骤:(1) 实现Cloneable接口(2) 重写Object类的clone()方法,并扩大其访问权限的范围使得在类外可访问1.1. 浅克隆被复制对象的所有属性都含有与源对象属性有相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制其属性引用的对象。浅克隆只会克隆一层(对象层),克隆后得到的对象和原来的对象相比较,他
2、们的属性值都相等。Object类的clone()方法属于浅克隆。1.2. 深克隆被复制对象的所有变量属性都含有源对象属性有相同的值,包含那些引用其他对象的属性,那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,深复制把要复制的对象所引用的对象也都复制了一遍。深克隆会克隆多层(可以达到属性层,具体情况要看clone()方法的实现逻辑),克隆后得到的对象和原来的对象相比较,他们的属性值都不相等。2. 克隆实例实例:对Person类实现克隆方法。实例说明:clone()方法将对象复制一份并返回给调用者。一般而言,clone()方法满足如下条件:(1) 对任何对象x
3、,都有x.clone() !=x; /克隆对象与原对象不是同一个对象(2) 对任何对象x,都有x.clone().getClass()= =x.getClass(); /克隆对象与原对象的类型一样(3) 如果对象x的equals()方法定义恰当,那么x.clone().equals(x); /应该成立2.1. 浅克隆实例Person实体类:package/* * 克隆实体类 * author Wenlong * date May 23, 2011 3:47:38 PM */public class Person implements Cloneableprivate long id;priva
4、te String name;public Person(String name) super(); = name;Overridepublic Person clone() throws CloneNotSupportedException Person p = (Person) super.clone();return p;Overridepublic String toString() return "Id:"+id+"tName:"+name;public long getId() return id;public void s
5、etId(long id) this.id = id;public String getName() return name;public void setName(String name) = name;测试类:package/* * 克隆测试类 * author Wenlong * date May 23, 2011 3:49:43 PM */public class TestPerson public static void main(String args) throws CloneNotSupportedException Person p1 = new Pers
6、on(1001,"Jack");System.out.println(p1);Person p2 = (Person) p1.clone();System.out.println(p2);System.out.println("p1=p2:"+(p1=p2);System.out.println("p1.id=p2.id:"+(p1.getId() = p2.getId();System.out.println("=:"+(p1.getName() = p2.getName();测试结果
7、:p1=p2:falsep1.id=p2.id:=:true结果分析:(1) 前两行打印的是两个对象p1和p2的内存地址(2) p1和p2不是同一个对象,所以p1=p2不相等(3) p2是p1的浅克隆对象,其属性值和源对象相等2.2. 深克隆实例Person实体类:package/* * 克隆实体类 * author Wenlong * date May 23, 2011 3:47:38 PM */public class Person implements Cloneableprivate long id;private String name;publi
8、c Person()super();public Person(long id,String name)super();this.id = id; = name;Overrideprotected Object clone() System.out.println("=>clone()");Person p = (Person) super.clone();p.id = this.id; = new String();return p;Overridepublic String toString() return &qu
9、ot;Id:"+id+"tName:"+name;public long getId() return id;public void setId(long id) this.id = id;public String getName() return name;public void setName(String name) = name;测试类:同浅克隆实例的测试类测试结果:p1=p2:falsep1.id=p2.id:=:false结果分析:(4) 前两行打印的是两个对象p1和p2的内存地址(5) p1和p2不是同一个对象,所以p1=p2不
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 20261023-000056-关于司姓的研究报告(带参考资料)
- 2025届嘉兴市桐乡市数学四年级下学期期中学业水平测试试题(含答案)
- 2026年球类运动培训行业年度报告
- 2026年农业科技发展报告及2025-2030年农业现代化趋势分析
- 2026年农业机械化市场深度分析报告
- 2026年洗涤行业报告:节能环保洗涤技术
- 2026年AI+珠宝行业消费者需求报告
- 2026年汽车零部件出口市场报告
- 2026年现代农业发展趋势及市场前景分析报告
- 2026年化妆品行业分析报告:行业危机应对与转型自救拓展市场空间
- 2026年医疗器械监督管理条例培训试卷附答案
- (正式版)DB14∕T 1324-2016 《公路桥梁预应力钢绞线局部释放法测试现存应力技术指南》
- 郑州网约车资格证模拟考试及答案
- 多资产配置全景研究系列控波御险:多资产组合风险管理方法论
- 2026年体育教研员竞聘题库(附答案)
- 水泥产品碳足迹核算报告
- 新版西师版五年级上册数学全册教案(完整版)教学设计含教学反思
- 电梯工程安装及后期保养合同三篇
- 人工智能驱动下的人才竞争力评价与专业演变研究
- 2025年正高面审答辩正高面审答辩重症医学笔试参考题库附带答案详解
- 工业网络和现场总线技术基础与案例
评论
0/150
提交评论