日期:2011-03-22 16:17:00 来源:本站整理
java克隆对象[Java编程]
本文“java克隆对象[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
若需改正一个对象,同时不想改变调用者的对象,就要制作该对象的一个本地副本.这也是本地副本最常见的一种用处.若决意制作一个本地副本,只需简单地利用clone()办法便可.Clone是“克隆”的意思,即制作完好一模一样的副本.这个办法在底子类Object中定义成“protected”(受保护)情势.但在但愿克隆的任何衍生类中,必须将其覆盖为“public”情势.比方,尺度库类Vector覆盖了clone(),所以能为Vector调用clone(),以下所示:
clone()办法产生了一个Object,后者必须当即重新造型为精确范例.这个例子指出Vector的clone()办法不能自动尝试克隆Vector内包含的每个对象——由于别名问题,老的Vector和克隆的Vector都包含了相同的对象.我们普通把这种情形叫作“简单复制”大概“浅层复制”,因为它只复制了一个对象的“表面”部份.实际对象除包含这个“表面”以外,还包含句柄指向的全部对象,以及那些对象又指向的其他全部对象,由此类推.这就是“对象网”或“对象关系网”的由来.若能复制下全部这张网,便叫作“全面复制”大概“深层复制”.//: Cloning.java // The clone() operation works for only a few // items in the standard Java library. import java.util.*; class Int { private int i; public Int(int ii) { i = ii; } public void increment() { i++; } public String toString() { return Integer.toString(i); } } public class Cloning { public static void main(String[] args) { Vector v = new Vector(); for(int i = 0; i < 10; i++ ) v.addElement(new Int(i)); System.out.println("v: " + v); Vector v2 = (Vector)v.clone(); // Increment all v2's elements: for(Enumeration e = v2.elements(); e.hasMoreElements(); ) ((Int)e.nextElement()).increment(); // See if it changed v's elements: System.out.println("v: " + v); } } ///:~
在输出中可看到浅层复制的后果,注意对v2采纳的行动也会影响到v:
普通来说,由于不敢保证Vector里包含的对象是“可以克隆”(注释②)的,所以最好不要试图克隆那些对象.v: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] v: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
②:“可以克隆”用英语讲是cloneable,请留神Java库中专门保存了这样的一个关键字.
以上是“java克隆对象[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
- ·上一篇文章:使类具有克隆本领
- ·下一篇文章:按值传送
- ·中查找“java克隆对象”更多相关内容
- ·中查找“java克隆对象”更多相关内容
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论