java如何实现对象的深克隆?

陈芝兰

30天以前 3浏览
java如何实现对象的深克隆?




/**定义用户**/

publicclassUser{

privateStringname;

privateAddressaddress;

//constructors,gettersandsetters

}

/**地址**/

publicclassAddress{

privateStringcity;

privateStringcountry;

//constructors,gettersandsetters

}

重载clone()方法

Object父类有个clone()的拷贝方法,不过它是protected类型的,

我们需要重写它并修改为public类型。

除此之外,子类还需要实现Cloneable接口来告诉JVM这个类是可以拷贝的。

重写代码

让我们修改一下User类,Address类,实现Cloneable接口,使其支持深拷贝。

/**

*地址

*/

publicclassAddressimplementsCloneable{

privateStringcity;

privateStringcountry;

//constructors,gettersandsetters

@Override

publicAddressclone()throwsCloneNotSupportedException{

return(Address)super.clone();

}

}

/**

*用户

*/

publicclassUserimplementsCloneable{

privateStringname;

privateAddressaddress;

//constructors,gettersandsetters

@Override

publicUserclone()throwsCloneNotSupportedException{

Useruser=(User)super.clone();

user.setAddress(this.address.clone());

returnuser;

}

}

需要注意的是,super.clone()其实是浅拷贝,

所以在重写User类的clone()方法时,address对象需要调用address.clone()重新赋值。



扩展:

为什么要克隆?

大家先思考一个问题,为什么需要克隆对象?直接new一个对象不行吗?

答案是:克隆的对象可能包含一些已经修改过的属性,而new出来的对象的属性都还是初始化时候的值,所以当需要一个新的对象来保存当前对象的“状态”就靠clone方法了。那么我把这个对象的临时属性一个一个的赋值给我新new的对象不也行嘛?可以是可以,但是一来麻烦不说,二来,大家通过上面的源码都发现了clone是一个native方法,就是快啊,在底层实现的。

提个醒,我们常见的Objecta=newObject();Objectb;b=a;这种形式的代码复制的是引用,即对象在内存中的地址,a和b对象仍然指向了同一个对象。

而通过clone方法赋值的对象跟原来的对象时同时独立存在的。


本文仅代表作者观点,版权归属原创作者,如需转载请在文中标注来源及作则名字。

免责声明:本文系转载编辑文章,仅做分享只用,如有疑问请联系邮箱:110@zbj.com

java开发
大家都在看
javascript、JSP、JS有什么区别和联系?

javascript、JSP、JS有什么区别和联系?

java开发
8浏览
如何使用Java代码访问HDFS.docx?

如何使用Java代码访问HDFS.docx?

java开发
10浏览
现在JAVA和前端哪个需求量大一点?

现在JAVA和前端哪个需求量大一点?

java开发
9浏览
Java程序猿与网络安全哪个行业前景更好?

Java程序猿与网络安全哪个行业前景更好?

java开发
7浏览
web编程用JavaScript怎么样?

web编程用JavaScript怎么样?

java开发
7浏览
java的web开发需要用多线程吗?

java的web开发需要用多线程吗?

java开发
5浏览
Java中常用的开发工具有哪些?

Java中常用的开发工具有哪些?

java开发
9浏览
javascript、JSP、JS有什么区别和联系?

javascript、JSP、JS有什么区别和联系?

java开发
8浏览
作为一个java程序员经常上的网站?

作为一个java程序员经常上的网站?

java开发
6浏览
WEB前端和JAVA哪个需求量大?

WEB前端和JAVA哪个需求量大?

java开发
10浏览
java开发app案例教程,java开发手机app教程

案例app开发app开发手机app教程手机开发手机appjavajava开发
75浏览
作为java初级程序员,该去国企还是私企?

作为java初级程序员,该去国企还是私企?

java开发
6浏览
Java开发程序员该如何应对公司的笔试题?

Java开发程序员该如何应对公司的笔试题?

java开发
5浏览
java如何实现对象的深克隆?

java如何实现对象的深克隆?

java开发
3浏览
Java网站系统建设有什么好处?

Java网站系统建设有什么好处?

java开发
2浏览
java前景如何?自学好学吗?

java前景如何?自学好学吗?

java开发
5浏览
Java编程中的性能优化如何实现?

Java编程中的性能优化如何实现?

java开发
7浏览
什么场景用java,什么场景用python?

什么场景用java,什么场景用python?

java开发
6浏览
web前端和java,哪个比较好一些呢?

web前端和java,哪个比较好一些呢?

java开发
6浏览
java微信开发框架使用文档,如何新建微服务?

java微信开发框架使用文档,如何新建微服务?

java开发
9浏览
点赞
收藏
分享