Clone
Posted 学习笔记和总结
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Clone相关的知识,希望对你有一定的参考价值。
对象拷贝用于在内存中复制对象,无需构造器便可创建对象。
需要注意的是
1.clone方法提供的只是简单的值拷贝和地址拷贝,若类中包含HashMap等类型时,需要手工编写拷贝过程
2.如果父类没有提供正确的clone方法,子类拷贝也将不正确
3.Object的clone方法没有同步
所以不建议覆盖clone方法,也不建议使用clone方法。
一个简单的例子:
------------------------------
1 package demos; 2 3 import java.util.Date; 4 5 public class CloneTest implements Cloneable { 6 private int id; 7 private String name; 8 private Date birday; 9 10 public CloneTest() { 11 } 12 13 public CloneTest(int id, String name, Date birday) { 14 this.id = id; 15 this.name = name; 16 this.birday = birday; 17 } 18 19 @Override 20 public String toString() { 21 return "[" + id + "-" + name + "-" + birday + "]"; 22 } 23 24 // 重写clone方法可以对克隆过程做更多处理,返回类型可以为CloneTest(父类为Object) 25 // 26 @Override 27 public CloneTest clone() { 28 CloneTest c = null; 29 try { 30 c = (CloneTest) super.clone(); 31 //引用对象需要独立拷贝 32 c.birday = (Date) birday.clone(); 33 } catch (CloneNotSupportedException e) { 34 e.printStackTrace(); 35 } 36 37 return c; 38 } 39 40 public static void main(String[] args) throws CloneNotSupportedException { 41 CloneTest a = new CloneTest(11, "Jack", new Date()); 42 CloneTest b = (CloneTest) a.clone(); 43 System.out.println(a); 44 System.out.println(b); 45 } 46 47 }
------------------------------
输出:
[11-Jack-Fri Nov 04 23:58:33 CST 2016]
[11-Jack-Fri Nov 04 23:58:33 CST 2016]
以上是关于Clone的主要内容,如果未能解决你的问题,请参考以下文章