克隆

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;
    }

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值