JAVA 有两种深度复制实现方式,分别是实现Cloneabel接口,并在接口函数中为每个属性调用Cloneable,也可以通过序列化的方式来实现。

package JAVAImprove;import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;//直接复制引用的句柄//通过序列化实现深度复制。
public class DeepClone implements Cloneable, Serializable{private transient LearnClone Lc;public LearnClone getLc() {return Lc;}public void setLc(LearnClone lc) {Lc = lc;}//注意序列化是不会调用构造函数的。public DeepClone(){System.out.println("Constractor");Lc = new LearnClone();}public static void main(String[] args){DeepClone dc = new DeepClone();try {DeepClone dc2 = (DeepClone)dc.clone();System.out.println("dc start:" + dc.getLc().getCheck());System.out.println("dc2 start:" + dc2.getLc().getCheck());//深度复制ByteArrayOutputStream bo = new ByteArrayOutputStream();try {ObjectOutputStream ot = new ObjectOutputStream(bo);ot.writeObject(dc);ot.close();ByteArrayInputStream io = new ByteArrayInputStream(bo.toByteArray());ObjectInputStream ip = new ObjectInputStream(io);//try {DeepClone dc3 = (DeepClone)ip.readObject();dc3.getLc().setCheck("is Deep Clone");System.out.println("dc3 end" + dc3.getLc().getCheck());System.out.println("dc end" + dc.getLc().getCheck());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}} catch (CloneNotSupportedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
package JAVAImprove;import java.io.Serializable;public class LearnClone implements Cloneable, Serializable {private String check = "learn Clone";public String getCheck() {return check;}public void setCheck(String check) {this.check = check;}@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();}public static void main(String[] args){//LearnClone cl = new LearnClone();cl.setCheck("ttt");LearnClone c2;try {c2 = (LearnClone)cl.clone();if(c2 == cl){System.out.println("equal");//首先实现接口可以完成属性的拷贝。}System.out.println("start cl" + cl.getCheck());System.out.println("start c2" + c2.getCheck());//不是一个值c2.setCheck("aaaaaaaaaaaaaa");System.out.println("c2" + c2.getCheck());System.out.println("C1" + cl.getCheck());} catch (CloneNotSupportedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

JAVA 对象深度复制实现相关推荐

  1. java 对象深度复制_Java深度复制– Java复制对象

    java 对象深度复制 Today we will look into Java deep copy. Sometimes we want to get a copy of an Object, bu ...

  2. Java Map深度复制

    Map深度复制 目录 Map深度复制 1,new HashMap<>(Object); 2,Put All; 3,串行化复制; 总结: 如何对Map类型的数据进行深度复制,有几种方式呢? ...

  3. java clone 序列化_关于Java对象深度Clone以及序列化与反序列化的使用

    ‍        我们可以利用clone方法来实现对象只见的复制,但对于比较复杂的对象(比如对象中包含其他对象,其他对象又包含别的对象.....)这样我们必须进行层层深度clone,每个对象需要实现 ...

  4. 由java中深度复制一伸出Collections.copy的使用

    今天在学习集合中 有关对象的深度拷贝和浅拷贝 的时候,像拷贝一个ArrayList对象到另一个ArrayList对象中,正好发现Collections有一个copy方法.可是不好用啊总是报错.查看ap ...

  5. Java对象到对象映射器

    我在该项目上使用了Dozer一段时间. 但是,最近我遇到了一个非常有趣的错误,它促使我环顾四周,并尝试使用其他"对象到对象"映射器. 这是我找到的工具列表: 推土机:推土机是Jav ...

  6. JAVA对象JSON数据互相转换的四种常见情况

    这篇文章主要介绍了JAVA对象JSON数据互相转换的四种常见情况,需要的朋友可以参考下 1. 把java 对象列表转换为json对象数组,并转为字符串 复制代码代码如下:     JSONArray ...

  7. 利用序列化与反序列化对Java对象进行深度复制

    来源  http://lhg803.iteye.com/blog/407270 JDK的API中的java.lang.Object和Cloneable接口要完美实现深度clone时,都需要针对具体的类 ...

  8. Java中对象的复制

    假如说你想复制一个简单变量.很简单: 1 int n = 5; 2 int m = n; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short,float,doub ...

  9. java复制一个对象_Java中对象的复制

    假如说你想复制一个简单变量.很简单: 1 int n = 5;2 int m = n; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short,float,doubl ...

最新文章

  1. activiti源码编译
  2. Python学习——模块的基本知识
  3. 日志文件列表 读书笔记《Linux 系统管理技术手册(第二版)》
  4. python中List的sort方法(或者sorted内建函数)的用法
  5. arp攻击 python_python之arp攻击
  6. Saltstack远程执行命令(3)
  7. hdfs读写流程_一篇文章搞清楚 HDFS 基本原理
  8. fd抓包数据类型_fiddler——抓包中的王者
  9. 190401每日一句
  10. 【心电信号】基于matlab心电信号特征提取+分析处理【含Matlab源码 289期】
  11. 全志v3s学习笔记(6)——Bsp内核编译与烧录
  12. 使用Chrome开发者工具下载Instagram上的图片
  13. 数理经济模型(1)---蒙特卡洛仿真Monte Carlo Simulation
  14. Amlogic S905X3外设驱动之RTC驱动:HYM8563驱动
  15. 漫威电影(复仇者联盟)系列观看顺序和资源下载地址
  16. 我奋斗了十八年不是为了和你喝一杯咖啡
  17. 蓦然回首,灯火阑珊——自考总结
  18. 《21天学通C++(第五版)》 [美] Jesse Liberty Bradley Jones著——个人学习笔记
  19. PHP性能 - php_performance - by llia alshanetsky
  20. LayaAir 2.9.0的3D渲染效果大幅提升(支持CommandBuffer、反射探针等众多3D功能)、插件功能大幅升级...

热门文章

  1. linux查看和修改文件与目录的权限
  2. 深度剖析Java常量池
  3. 广联达服务器没有及时响应,服务没有及时响应启动或控制请求,手把手教你服务没有及时响应启动或控制请求怎么解决...
  4. 机器学习(32)之典型相关性分析(CCA)详解 【文末有福利......】
  5. 树莓派笔记08—Python流水灯
  6. 计算机手工操作管理方式是处于什么时代,2管理系统中计算机应用.ppt
  7. php 商品价格区间表,ThinkPHP框架,按分类,计算商品价格区间,来完成价格搜索...
  8. 计算机中丢失uxtheme dll,win7系统丢失uxtheme.dll的解决方法
  9. JMeter实用案例讲解:生成Mockup/Dummy JSON压测REST API
  10. 精度解析百思不得姐流行框架之精华版