荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: heiheihei (瓦尔特), 信区: Java
标 题: java手记(7)--浅层克隆
发信站: 荔园晨风BBS站 (Wed Nov 14 14:17:33 2001), 转信
java手记(7)--浅层克隆
瓦尔特
如果想要制作某个对象的副本,由于同名问题的存在,必须使用clone()方法才能够实现.
clone()方法能制作与原对象完全一模一样的副本.该方法在基础类Object中定义为prot
ected,如果在衍生类中进行克隆,就必须将其覆盖为public模式.
例子程序.
//CloneTest.java
import java.util.*;
class Int
{
private int i;
public Int(int j){i=j;}
public void change(){i++;}
public String toString()
{
return Integer.toString(i);
}
}
public class CloneTest
{
public static void main(String[] args)
{
Vector v1=new Vector();
for (int i=0;i<10;i++) v1.addElement(new Int(i));
System.out.println("v1:"+v1);
Vector v2=(Vector)v1.clone();
for (Enumeration e=v2.elements();e.hasMoreElements();)
((Int)e.nextElement()).change();
System.out.println("v1:"+v1);
}
}
运行结果:C:\myjava>java CloneTest
v1:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
v1:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
在上面的例子中可以看出,clone()方法还是因为别名的问题并不能自动克隆Vector内包
含的每一个对象,对v2的操作仍然会影响到v1.这种现象叫对象的浅层克隆.也就是仅仅克
隆了对象的表面部分,但是句柄指向的所有对象以及那些对象指向的对象并没有被完全的
克隆下来.
关于克隆的问题,在今后几天继续探讨.
瓦尔特学自thinking in java
--
世界上没有任何话能说服你,除非它是你心中的那一句。
世界上没有任何人能打动我,除非她是我心中的那一个。
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 202.118.1.82]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店