首页 > 代码库 > Clone
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 }
------------------------------
输出:
<style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco }</style>[11-Jack-Fri Nov 04 23:58:33 CST 2016]
[11-Jack-Fri Nov 04 23:58:33 CST 2016]
Clone
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。