荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: 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软件 网络书店