对象克隆

  对象的克隆是指复制出一个与原对象的实体内容完全一样的另一个对象,两个对象有着不同的引用,不同的实体空间,但是实体的内容完全一样,通过java提供的clone方法来实现克隆,clone方法是基类Object的一个protected方法,任何类都会继承该方法,这个方法必须被重写,否则达不到克隆的效果,clone方法多数是在类外使用的,此时要重写成public的,重写clone方法必须实现Cloneable接口,该接口没有任何要实现的方法,它的作用就是通知JVM可以安全地在实现了此接口的类的实例上使用clone方法,不实现此接口会抛出CloneNotSupportedException异常

public class Student implements Cloneable {
    public int a;
    public Student() {}
    public Object clone() {
        Student s = null;
        try {
            s = (Student) super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return s;
    }
}
Student s1 = new Student();
Student s2 = (Student) s1.clone();

  该复制为浅复制,只能复制对象里的非引用类型的成员,对于引用类型的成员复制的仍然为引用,若想实现深复制,必须首先重写对象里引用类型成员的clone方法,然后在该类的clone方法中,对于其中引用类型变量的复制,明确调用其clone方法复制,java自带的引用类型的成员的clone方法应该都被实现了,我们可以直接用。

public class Student implements Cloneable {
    //Student内的引用类型成员
    public Address addr;
    public int a;
    public Student() {
        addr = new Address();
    }
    public Object clone() {
        Student s = null;
        try {
            //先复制一个Student,之后对其中的引用成员addr使用clone复制
            s = (Student) super.clone();
            s.addr = (Address) this.addr.clone();
        } cathc(CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return s;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值