克隆

来源:互联网 发布:淘宝开店时长 编辑:程序博客网 时间:2024/04/28 14:12

java的克隆实现方式有两种一种是实现cloneable接口并重写Object的clone()方法,另外一种是实现serializable接口;
克隆有分为浅度克隆和深度克隆。浅克隆对象的成员变量是引用类型,复制的是地址给克隆对象,是值类型,复制是内容。深度克隆无论对象的成员变量是值类型还是引用类型,内容都复制给克隆对象。假如要克隆的类A中有一个引用类型的变量b时,当重写A对象的clone方法时,把B对象的克隆方法返回的对象赋值给A对象的成员变量b。代码如下:

protected Object clone(){        Student stu=null;        try {            stu=(Student)super.clone();        } catch (CloneNotSupportedException e) {            e.printStackTrace();        }        stu.add=(Address)add.clone();        return stu;}

用实现cloneable实现深度克隆也有些局限性,如果对象中有引用类型,引用类型里面又有引用类型,这样用实现cloneable接口来实现克隆就比较麻烦了。
用实现serializable同样可以实现深度克隆。将要克隆的对象实现serializable接口,并写个方法返回对象。方法代码如下:

public Outer myclone() {        Outer out=null;        try {            ByteArrayOutputStream bos=new ByteArrayOutputStream();             ObjectOutputStream oos=new ObjectOutputStream(bos);             oos.writeObject(this);            ByteArrayInputStream bis=new ByteArrayInputStream(bos.toByteArray());            ObjectInputStream ob=new ObjectInputStream(bis);            out=(Outer)ob.readObject();        }catch(Exception e) {            e.printStackTrace();        }        return out;    }

此方法通过序列化,反序列的方式实现克隆对象。

原创粉丝点击