欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java——实现浅克隆(实际上是Object类的clone()方法)

程序员文章站 2022-05-20 09:39:48
...

1,实现克隆包括两个动作
(1):在堆内存中创建同一个类型下的新对象
(2):将原先的对象的所有成员变量的值,复制一份,分别赋值给新的对象;但是,成员变量的类型有要求,一定要是基本数据类型8(种)+String(特殊的引用类型);换句话说,其他引用,不再clone,直接引用相同的地址值。
【与之不同的是深克隆:无论成员变量是否为引用类型,所有的成员变量都复制一份已达到完全的克隆。(但是系统默认不支持,如果需要,需要程序员自己动手去做)】
2,实现浅克隆的步骤
(1):实现接口Cloneable(声明式接口,只有名字,没有抽象方法)
(2):重写object#clone()方法
(3):抛异常或者以try…catch的形式处理因为克隆而可能发生的异常
[首先需要明白:object类的clone()方法类型是protected,(也就是说clone()只能在Object这个类中使用)返回值类型是object,定义一个类的时候要实现克隆就必须实现Cloneable接口,重写clone方法,引用的时候,注意类型转换]
例如
++++++++++++++++++++++++++++++++
public class Student implements Cloneable{
private String name;
private String gender;
private int age;
private String school;

public Student() {
}

public Student(String name, String gender, int age, String school) {
    this.name = name;
    this.gender = gender;
    this.age = age;
    this.school = school;
}

@Override
public String toString() {
    return "Student{" +
            "name='" + name + '\'' +
            ", gender='" + gender + '\'' +
            ", age=" + age +
            ", school='" + school + '\'' +
            '}';
}

@Override
protected Object clone() throws CloneNotSupportedException {
    return super.clone();
}

}
+++++++++++++++++++++++++++++++
public class ObjectDemo {
public static void main(String[] args){
Student stu1=new Student(“jerry”,“male”,20,“轻工业”);
Student stu2=stu1;//两个对象指向了同一块内存空间
System.out.println(stu1);
System.out.println(stu2);
System.out.println(“stu1#hashCode=”+stu1.hashCode());
System.out.println(“stu2#hashCode=”+stu2.hashCode());
Student stu3=null;
try {
stu3=(Student) stu1.clone();
}catch (CloneNotSupportedException e){
e.printStackTrace();
}
System.out.println("==clone对象=");
System.out.println(stu3);
System.out.println(“stu3#hashCode=”+stu3.hashCode());
}

}