Java clone方法的使用

浅克隆

Person p2 = (Person) p1.clone();

clone()方法使用后得到p2p2p1指向不同的地址。但是如果p1中的属性是引用类型,那么不再对这个引用类型进行复制,而止于这个引用。

clone类

Ojbect类中clone()protected修饰,因此需要扩权。在Person中重写这个方法(并抛出异常)。同时需要实现cloneable接口,否则将报错。

代码

Person类

public class Person implements Cloneable{

    private String name;
    private int age;
    private Addr addr;

    public String getName() {
        System.out.println(this+this.name);
        return name;
    }
    public String getAddr() {
        System.out.println(this+addr.city);
        return addr.city;
    }
    public void setAddr(String city) {
        this.addr.city = city;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

其中Person中的地址,是Addr类型:

public class Addr {
    public String city;
}

Test类:

public class Test1 {

    public static void main(String[] args) {
        Person p1 = new Person();
        p1.setAge(11);
        p1.setName("xiaoming");
        p1.setAddr("南京");
        p1.getName();
        p1.getAddr();
        Person p2=(Person) p1.clone();
        p2.getName();
        p2.getAddr();
    }
}

得到结果,p1p2指定不同的区域,但是他们的addr指向同一区域。

原文地址:https://www.cnblogs.com/heenhui2016/p/10964576.html