两种方式:
  1). 实现Cloneable接口并重写Object类中的clone()方法;
  2). 实现Serializable接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆,代码如下

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;public class MyUtil {private MyUtil() {throw new AssertionError();}@SuppressWarnings("unchecked")public static <T extends Serializable> T clone(T obj) throws Exception {ByteArrayOutputStream bout = new ByteArrayOutputStream();ObjectOutputStream oos = new ObjectOutputStream(bout);oos.writeObject(obj);ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());ObjectInputStream ois = new ObjectInputStream(bin);return (T) ois.readObject();// 说明:调用ByteArrayInputStream或ByteArrayOutputStream对象的close方法没有任何意义// 这两个基于内存的流只要垃圾回收器清理对象就能够释放资源,这一点不同于对外部资源(如文件流)的释放}
}
class Student implements Cloneable{private String name;private int age;private StudentClass studentClass;private List<String> list = new ArrayList<>();public Student() {// TODO Auto-generated constructor stubSystem.out.println("构造方法被调用");}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public StudentClass getStudentClass() {return studentClass;}public void setStudentClass(StudentClass studentClass) {this.studentClass = studentClass;}public void add(String aa){this.list.add(aa);}@Overridepublic Object clone() throws CloneNotSupportedException {// TODO Auto-generated method stubStudent stu = (Student) super.clone();return stu;}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + ",class"+studentClass.getStudentClass()+",list"+list+"]";}}

Java实现对象深度克隆相关推荐

  1. java中的深度克隆浅克隆_了解Java中的可克隆接口

    java中的深度克隆浅克隆 什么是对象克隆? 对象克隆是生成具有不同名称的对象的精确字段到字段副本的过程. 克隆的对象在内存中有自己的空间,可在其中复制原始对象的内容. 这就是为什么在克隆后更改原始对 ...

  2. JAVA之对象的克隆

    JAVA之对象的克隆 1.为什么要克隆? ①方便,克隆的对象可能包含一些已经修改过的属性,而new出来的对象的属性都还是初始化时候的值,所以当需要一个新的对象来保存当前对象的"状态" ...

  3. java浅度克隆_java对象 深度克隆(不实现Cloneable接口)和浅度克隆

    为什么需要克隆: 在实际编程过程中,我们常常要遇到这种情况:有一个对象A,在某一时刻A中已经包含了一些有效值,此时可能会需要一个和A完全相同新对象B,并且此后对B任何改动都不会影响到A中的值,也就是说 ...

  4. java deep clone util_实现对象深度克隆(deepClone)的三种方案

    转:http://www.cnblogs.com/wangzhichao/archive/2013/04/11/3014419.html 方案一:利用现代浏览器支持的JSON对象做一次中转,实现深度克 ...

  5. Java实现对象的克隆方式

    Java实现对象克隆的方法 1.Java实现克隆有两种形式 浅拷贝 深拷贝 在Java中吗,我们说两个对象是否相等通常有两层含义: 对象的内容是否相等,通常使用到对象的 equals(Object o ...

  6. JAVA复习(对象的克隆、正则表达式)

    对象的克隆 对象的克隆就是复制的操作,和之前学习的引用传递不同 在引用传递中一个 实例 可以有多个名字 但是多个名字都指向一个对象 克隆出来的对象 和之前的对象 没有任何的引用关系 想要实现对象的克隆 ...

  7. java序列化与深度克隆

    如果类的成员变量比较复杂,例如引用了多个可变引用类型,那么这时使用clone()方法来克隆是非常麻烦的 可以考虑序列化的方法完成克隆 test代码 package com.mingrisoft; im ...

  8. 啥是对象的浅度克隆和深度克隆?

    在日常的开发中,我们经常会遇到需要克隆一个对象,对克隆的对象操作之后不影响原有对象以及与之关联的对象 Java的Object类提供了clone方法,用来进行克隆对象,不过JDK提供的clone()方法 ...

  9. jquery,angular 对象数组的克隆和深度克隆

    var obj1 = $.extend(false, {}, obj2);  //对象克隆 var obj1 = $.extend(true, {}, obj2);   //对象深度克隆 ------ ...

最新文章

  1. html创建php,php-从html创建图像
  2. transition过渡规定慢速开始,然后变快,然后慢速结束的过渡效果(cubic-bezier(0.25,0.1,0.25,1))。...
  3. PaddleOCR——DEMO
  4. db2诊断系列之---定位锁等待问题
  5. 微信公开课讲师李卿:小游戏开放 100 天
  6. 大数据的可视化:bigvis包的简单尝试
  7. oracle性能检测sql语句
  8. 一些认识或对不清楚知识的猜想
  9. 图解:如何在LINUX中安装VM-Tools
  10. 【详解】P问题、NP问题和NPC问题详解(千禧年问题之首)
  11. ScaleAnimation和TranslateAnimation同时使用
  12. 如何查询芯片 IC 元器件 的datasheet数据手册
  13. 实战:入侵win10
  14. 网站一键分享到新浪微博QQ空间腾讯微博
  15. 杭电acm--2154跳舞毯
  16. python 机器学习 一元和二元多项式回归 梯度下降算法
  17. sbit在c语言中作用,sbit在单片机中的表示和作用?
  18. 去除硬盘安全删除硬件图标
  19. 精读:理论与实践融合 学者与干将统一
  20. UG二次开发GRIP创建注释

热门文章

  1. LILYGO T-Wristband 可编程的手环
  2. oracle和,Oracle数据库_Oracle托管_Oracle和AWS-AWS云服务
  3. PHP 链式操作 - 学习/实践
  4. hdu 4070 Phage War
  5. 模拟Chrome皮肤
  6. 机器学习——方差与偏差
  7. MySQL 索引之道
  8. 对C++ static作用——修饰 数据成员(改变为静态数据成员)、 成员函数(改变为静态成员函数)
  9. Python 算术运算符及用法详解
  10. python读取mysql数据每次都耗时600秒_就是这么流弊!三行Python代码,让数据处理速度提高2到6倍...