在Java中,要得到一個對象的完整拷貝不能通過"="實現(xiàn),因為這樣只實現(xiàn)了該對象的引用的拷貝,如果對該對象進行操作,針對的還是同一個對象。
那么,如何得到一個對象的拷貝?我們可以通過JAVA給我們提供的對象克隆機制來實現(xiàn)。并且不含引用類型的對象克隆實現(xiàn)與包含引用類型的對象的克隆實現(xiàn)有所不同。
首先,看一下只包含基本數(shù)據(jù)類型的對象的克隆實現(xiàn)(請看下面的代碼)
class ObjectClone
{
public static void main(String[] args)
{
Student stu1=new Student(1,20,"zhangshan");
System.out.println(stu1);
Student stu2=(Student)stu1.clone();
stu2.name="lishi";
System.out.println(stu2);
System.out.println(stu1);
}
}
class Student implements Cloneable
{
int index;
int age;
String name;
Student(int index,int age,String name,Professor p)
{
this.index=index;
this.age=age;
this.name=name;
}
public Object clone()
{
Object o=null;
try
{
o=super.clone();
return o;
}
catch(Exception e)
{
e.printStackTrace();
return null;
}
}
public String toString()
{
return "index="+index+","+"age="+age+","+"name="+name;
}
}
輸出結(jié)果:
index=1,age=20,name=zhangshan
index=1,age=20,name=lishi
index=1,age=20,name=zhangshan
我們可以看到我們修改stu2的name成員時,沒有影響到stu1,說明獲得對象的拷貝成功。
下面我們繼續(xù)看一下包含引用數(shù)據(jù)類型的對象的克隆實現(xiàn)。
/
要使一個類得到克隆功能有三步工作
1.重定基類的clone方法并聲明為public類型。
2.在派生類的clone方法中調(diào)用super.clone()方法實現(xiàn)對象的克隆。
3.在派生類中實現(xiàn)Cloneable接口。
注意事項:
如果被克隆的對象中有引用類型的數(shù)據(jù)成員,那么該引用類型
也應該按以上三步實現(xiàn)克隆功能,考試大提示如下面的Professor。
2008-11-2 by Janker
/
class ObjectClone
{
public static void main(String[] args)
{
Professor p=new Professor("林教授",21);
Student stu1=new Student(1,20,"zhangshan",p);
System.out.println(stu1);
Student stu2=(Student)stu1.clone();
stu2.name="lishi";
stu2.p.name="張教授";
System.out.println(stu2);
System.out.println(stu1);
}
}
那么,如何得到一個對象的拷貝?我們可以通過JAVA給我們提供的對象克隆機制來實現(xiàn)。并且不含引用類型的對象克隆實現(xiàn)與包含引用類型的對象的克隆實現(xiàn)有所不同。
首先,看一下只包含基本數(shù)據(jù)類型的對象的克隆實現(xiàn)(請看下面的代碼)
class ObjectClone
{
public static void main(String[] args)
{
Student stu1=new Student(1,20,"zhangshan");
System.out.println(stu1);
Student stu2=(Student)stu1.clone();
stu2.name="lishi";
System.out.println(stu2);
System.out.println(stu1);
}
}
class Student implements Cloneable
{
int index;
int age;
String name;
Student(int index,int age,String name,Professor p)
{
this.index=index;
this.age=age;
this.name=name;
}
public Object clone()
{
Object o=null;
try
{
o=super.clone();
return o;
}
catch(Exception e)
{
e.printStackTrace();
return null;
}
}
public String toString()
{
return "index="+index+","+"age="+age+","+"name="+name;
}
}
輸出結(jié)果:
index=1,age=20,name=zhangshan
index=1,age=20,name=lishi
index=1,age=20,name=zhangshan
我們可以看到我們修改stu2的name成員時,沒有影響到stu1,說明獲得對象的拷貝成功。
下面我們繼續(xù)看一下包含引用數(shù)據(jù)類型的對象的克隆實現(xiàn)。
/
要使一個類得到克隆功能有三步工作
1.重定基類的clone方法并聲明為public類型。
2.在派生類的clone方法中調(diào)用super.clone()方法實現(xiàn)對象的克隆。
3.在派生類中實現(xiàn)Cloneable接口。
注意事項:
如果被克隆的對象中有引用類型的數(shù)據(jù)成員,那么該引用類型
也應該按以上三步實現(xiàn)克隆功能,考試大提示如下面的Professor。
2008-11-2 by Janker
/
class ObjectClone
{
public static void main(String[] args)
{
Professor p=new Professor("林教授",21);
Student stu1=new Student(1,20,"zhangshan",p);
System.out.println(stu1);
Student stu2=(Student)stu1.clone();
stu2.name="lishi";
stu2.p.name="張教授";
System.out.println(stu2);
System.out.println(stu1);
}
}

