1. clone类

  1. public class Person implements Cloneable, Serializable{
  2.  
  3. /**
  4. *
  5. */
  6. private static final long serialVersionUID = -1875488046285294760L;
  7.  
  8. private String name;
  9.  
  10. private String age;
  11.  
  12. public String getName() {
  13. return name;
  14. }
  15.  
  16. public void setName(String name) {
  17. this.name = name;
  18. }
  19.  
  20. public String getAge() {
  21. return age;
  22. }
  23.  
  24. public void setAge(String age) {
  25. this.age = age;
  26. }
  27.  
  28. public Person(String name, String age) {
  29. super();
  30. this.name = name;
  31. this.age = age;
  32. }
  33.  
  34. public Person() {
  35. super();
  36. }
  37.  
  38. @Override
  39. public String toString() {
  40. return "Person [name=" + name + ", age=" + age + "]";
  41. }
  42. }

  1. public class Student implements Cloneable, Serializable{
  2.  
  3. /**
  4. *
  5. */
  6. private static final long serialVersionUID = -3295242197841442839L;
  7.  
  8. private Person person;
  9.  
  10. private String school;
  11.  
  12. public Person getPerson() {
  13. return person;
  14. }
  15.  
  16. public void setPerson(Person person) {
  17. this.person = person;
  18. }
  19.  
  20. public String getSchool() {
  21. return school;
  22. }
  23.  
  24. public void setSchool(String school) {
  25. this.school = school;
  26. }
  27.  
  28. public Student(Person person, String school) {
  29. super();
  30. this.person = person;
  31. this.school = school;
  32. }
  33.  
  34. public Student() {
  35. super();
  36. }
  37.  
  38. /**
  39. * 深clone
  40. * @param student
  41. * @return
  42. * @throws IOException
  43. * @throws ClassNotFoundException
  44. */
  45. public Object deepClone(Student student) throws IOException, ClassNotFoundException{
  46. ByteArrayOutputStream bos = new ByteArrayOutputStream();
  47. ObjectOutputStream ops = new ObjectOutputStream(bos);
  48. ops.writeObject(this);
  49.  
  50. ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
  51. ObjectInputStream ois = new ObjectInputStream(bis);
  52. return ois.readObject();
  53. }
  54.  
  55. /**
  56. * 浅clone
  57. * @param student
  58. * @return
  59. * @throws CloneNotSupportedException
  60. */
  61. public Object clone(Student student) throws CloneNotSupportedException{
  62. Student st = (Student) student.clone();
  63. return st;
  64. }
  65.  
  66. @Override
  67. public String toString() {
  68. return "Student [person=" + person + ", school=" + school + "]";
  69. }
  70. }

2. 测试类

  1. public class TestMain {
  2.  
  3. public static void main(String[] args) throws CloneNotSupportedException, ClassNotFoundException, IOException {
  4. Person p = new Person("张三", "21");
  5. Student s = new Student(p, "水木");
  6. Student s1 = (Student) s.clone(s);
  7. Student s2 = (Student) s.deepClone(s);
  8. System.out.println(s1);
  9. System.out.println(s2);
  10. p.setAge("212");
  11. System.out.println(s1);
  12. System.out.println(s2);
  13. }
  14. }

java 深clone和浅clone的更多相关文章

  1. Java 深复制和浅复制

    浅复制是指复制对象时仅仅复制对象本身(包括对象中的基本变量),而不复制对象包含的引用指向的对象.深复制不仅复制对象本身,而且复制对象包含的引用指向的对象. 复制对象时需要调用Object类的clone ...

  2. 深度clone和浅clone

    首先等你有空的时候可以看这篇,要用可以看我这篇 https://www.cnblogs.com/echolun/p/7889848.html 1.有一点需要明确的是 深拷贝只是针对引用数据类型来说的, ...

  3. Java中的clone()----深复制,浅复制

    这篇文章主要介绍了Java中对象的深复制(深克隆)和浅复制(浅克隆) ,需要的朋友可以参考下 1.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他 ...

  4. clone()方法、深复制和浅复制

    clone方法 Java中没有明确提供指针的概念和用法,而实质上没个new语句返回的都是一个指针的引用,只不过在大部分情况下开发人员不需要关心如何去操作这个指针而已. 在实际编程中,经常会遇到从某个已 ...

  5. php对象复制、clone、浅复制与深复制实例详解

    php对象复制.clone.浅复制与深复制实例详解 一.用clone(克隆)来复制对象$obj1 = new Object();$obj2 = clone $obj1;clone方法会触发对象里定义的 ...

  6. 类复制 MemberwiseClone与Clone(深 浅 Clone)

    MemberwiseClone 方法创建一个浅表副本,具体来说就是创建一个新对象,然后将当前对象的非静态字段复制到该新对象.如果字段是值类型的,则对该字段执行逐位复制.如果字段是引用类型,则复制引用但 ...

  7. JAVA深复制(深克隆)与浅复制(浅克隆)

    1.浅复制与深复制概念⑴浅复制(浅克隆)被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不 复制它所引用的对象. 1. ...

  8. Java中对象的深复制和浅复制详解

    1.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象. ⑵ ...

  9. Java中的深复制与浅复制

    1.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不 复制它所引用的对象. ...

随机推荐

  1. Linux 信号量同步编程

    前一篇文章概述了Linux 系统中信号量互斥编程,这篇文章正好是前一篇的姊妹篇----信号量同步.说它们是姊妹篇是因为它们都是利用了内核的信号量机制实现了进程间的通信.因为两者所解决的问题不同,因此它 ...

  2. Ext.Date 方法

    1.Ext.Date.add(date,interval,value); 提供执行基本日期运算的简便方法; date 日期对象, interval 一个有效的日期间隔枚举值, value 向当前日期上 ...

  3. TCP/IP笔记 应用层(1)——DNS

    1. DNS DNS(Domain Name System ):域名系统,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机 ...

  4. C语言变量声明加冒号的用法

    有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可.为了节省存储空间,并使处理简便,C语言又提供了一种数据结构 ...

  5. 多线程-GCD学习笔记

    ********************************* 基本概念 *********************************** 1. Grand Central Dispatch ...

  6. sublime3快捷键汇总

    !+tab生成html结构文档选择类 Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本.Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑.举个栗子: 快速选 ...

  7. jq总结1

    选择器 /** * 多目标选择器 * 可以选择多个元素或者表达式, * 包装成 jQuery 对象的集合 * 例子:$("div,span") */ $("table t ...

  8. HTML+JS版本的俄罗斯方块

    <!doctype html><html><head></head><body> <div id="box" st ...

  9. python之requests-multipart/from-data

    示例代码:files = {"token":(None,token), "key":(None,key), "file":"hel ...

  10. Unity与IOS交互

    Unity IOS交互 @By 广州小龙  QQ群:63438968 环境:Mac os 10.9.2  Unity 4.2.1f4   Xcode 5.0.2 Unity IOS的交互我写过一个教程 ...