自定义实现“克隆”
来源:互联网 发布:第戎高等商学院 知乎 编辑:程序博客网 时间:2024/06/16 22:31
1.自定义实现Cloneable接口。这是一个标记性的接口,实现该接口的对象可以实现“自我克隆”,接口没有定义实现方法
2.自定义实现自己的clone方法。
3.实现clone()方法时通过super.clone();调用Object()方法来得到该对象的副本,并返回该副本,如下程序实现了“自我克隆”:
class Address{String detail;public Address(String detail){this.detail=detail;}}//实现clone接口class User implements Cloneable{int age;Address address;public User(int age){this.age=age;address =new Address("广州天河");}public User Clone() throws CloneNotSupportedException{return (User)super.clone();}}public class CloneTest {public static void main(String[] args) throws CloneNotSupportedException{User u1=new User(29);User u2=u1.Clone();System.out.println(u1==u2);System.out.println(u1.address==u2.address);//含义为指向同一个对象System.out.println(u1.address.detail);System.out.println(u2.address.detail);}}Object类提供的Clone机制只对对象里各实例变量进行“简单复制”,如果实例变量的类型是引用类型,Object的Clone机制也只是简单的复制这个引用变量,这样原有对象的引用类型的实例变量与克隆对象的引用类型实例变量依然指向内存中同一个实例。
Object类提供的clone()方法不仅能够简单地处理“复制”对象的问题,而且这种“自我克隆”机制十分高效。比如一个100个元素的int[]数组,系统默认的clone方法比静态的copy快2倍。
Object提供的Clone方法虽然简单、易用但它只是一种“浅克隆”——他只克隆该对象的所有成员变量值,不会对引用类型的成员变量值所引起的对象进行克隆。如果开发者需要对对象进行深克隆,则需要开发者对自己进行“递归”克隆,保证所有引用类型的成员变量值所引用的变量值被复制了。
阅读全文
0 0
- 自定义实现“克隆”
- 自定义类实现克隆
- js实现克隆节点
- 实现对象克隆
- 实现对象的克隆
- java 实现对象克隆
- js实现深克隆
- java 实现对象的克隆
- JS完美实现对象克隆
- js实现对象完美克隆
- 序列化实现深度克隆
- JS深度克隆代码实现
- JS对象深度克隆实现
- 浅克隆与深克隆的区别以及实现
- java对象克隆简单实现(可多级克隆)
- Java深克隆和浅克隆的原理及实现
- JAVA里的深克隆与浅克隆实现
- 克隆
- centos7 下 基于docker搭建java/tomcat (方式一)
- 如何使用Stanford CoreNlp做中文情感分析
- JavaScript的错误与调试
- HDU 4430 Yukari's Birthday
- JAVA虚拟机、Dalvik虚拟机和ART虚拟机简要对比
- 自定义实现“克隆”
- C#同步线程类
- 定时器 — 延时小菜单
- D
- cmd界面中退出node.js或者npm命令,返会之前的目录
- c语言32个关键字_define
- HDU1262:寻找素数对
- Unix/Linux入门学习170725知识点备忘总结*1
- Retrofit2 完全解析