您的位置:首页 > 职场人生

黑马程序员--对象的克隆

2014-02-08 13:10 387 查看
----------   android培训java培训、期待与您交流! ---------- 

对象的克隆
对象的克隆又称对象的复制,它与对象的赋值不是一个含义,他们的区别可以根据下面的例子看出。
假设Student是一个类,并且该类有一个正确的clone()方法,下面的代码:
例一
Student s1 = new Student();
Student s2 = s1;
例二
Student s1 = new Student();
Student s2 = (Student)s1.clone();
 例一实际上是完成了对象引用的复制,也就是s1和s2指向是同一个对象。内存模型如下图
而例二则完成了s1对象的复制,把复制的的新对象用s2引用,s1和s2是两个对象,因为clone()方法返回的是Object类的对象,所以要对其返回值进行强制类型转换,以得到真确的对象。内存模型如下图:
对象的克隆通过clone()方法来实现,clone()方法将返回一个新对象,且新对象的初始状态与调用clone()方法的对象完全相同,对新克隆对象的的修改不会影响原对象的状态。在Object
类中定义了clone()方法,并且该方法被声明为protected类型,这就是决定了该方法只有在父类的包中和她的后代中才是可见的,尽管克隆方法是在所有类的父类Object中定义的,但克隆不会再每个类里自动进行,这意味着如果希望一个类能够克隆,必须要完成以下操作:
第一,  实现Cloneable接口第二,覆盖clone()方法,并且把覆盖访问权限设为public。第三:在自己的clone()方法中调用super.clone()。第四自己的clone()中捕获CloneNotSupertedException异常。
克隆对象实例:
package com.itheima;

class Student implements Cloneable {
char sex;
int age;

Student(char sex, int age) {
this.sex = sex;
this.age = age;
}

public Object clone() {
Object object = null;
try {
object = super.clone();
} catch (CloneNotSupportedException e) {
System.out.println("对象无法克隆");
}
return object;
}
}

public class StudentClone {

public static void main(String[] args) {
Student s1 = new Student('男', 12);
Student s2= (Student) s1.clone();
System.out.println("对象一" + s1);
System.out.println("s1.sex" + "=" + s1.sex + "s1.age" + "=" + s1.age);
System.out.println("对象二" + s2);
System.out.println("s2.sex" + "=" + s2.sex + "s2.age" + "=" + s2.age);
}
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  对象