java面向对象编程:Java中包含引用数据类型对象的克隆实现



      在Java中要得到个对象完整拷贝不能通过"="实现这样只实现了该对象引用拷贝如果对该对象进行操作针对还是同个对象
 
      那么如何得到个对象拷贝?我们可以通过JAVA给我们提供对象克隆机制来实现并且不含引用类型对象克隆实现和包含引用类型对象克隆实现有所区别 


      首先下只包含基本数据类型对象克隆实现(请看下面代码)

ObjectClone
{
public void (String args)
{
Student stu1= Student(1,20,"zhangshan");
.out.prln(stu1);
Student stu2=(Student)stu1.clone;
stu2.name="lishi";
.out.prln(stu2);
.out.prln(stu1);
}
}
Student implements Cloneable
{
index;
age;
String name;
Student( index, age,String name,Professor p)
{
this.index=index;
this.age=age;
this.name=name;
}
public Object clone
{
Object o=null;
try
{
o=super.clone;
o;
}
catch(Exception e)
{
e.prStackTrace;
null;
}
}
public String toString
{
"index="+index+","+"age="+age+","+"name="+name;
}
}

输出结果:

index=1,age=20,name=zhangshan
index=1,age=20,name=lishi
index=1,age=20,name=zhangshan

我们可以看到我们修改stu2name成员时没有影响到stu1介绍说明获得对象拷贝成功



下面我们继续看下包含引用数据类型对象克隆实现

/************************************************************
* 要使个类得到克隆功能有 3步工作
* 1.重定基类clone思路方法并声明为public类型
* 2.在派生类clone思路方法中super.clone思路方法实现对象克隆
* 3.在派生类中实现Cloneable接口
* 注意事项:
* 如果被克隆对象中有引用类型数据成员那么该引用类型
* 也应该按以上 3步实现克隆功能如下面Professor
* 2008-11-2 by Janker
************************************************************/
ObjectClone
{
public void (String args)
{
Professor p= Professor("林教授",21);
Student stu1= Student(1,20,"zhangshan",p);
.out.prln(stu1);
Student stu2=(Student)stu1.clone;
stu2.name="lishi";
stu2.p.name="张教授";
.out.prln(stu2);
.out.prln(stu1);
}
}
Professor implements Cloneable
{
String name;
age;
Professor(String name, age)
{
this.name=name;
this.age=age;
}
public Object clone
{
try
{
Object o=super.clone;
o;
}
catch(Exception e)
{
e.prStackTrace;
null;
}
}
}
Student implements Cloneable
{
index;
age;
String name;
Professor p;
Student( index, age,String name,Professor p)
{
this.index=index;
this.age=age;
this.name=name;
this.p=p;
}
public Object clone
{
Object o=null;
try
{
/*注意这里处理*/
o=super.clone;
Student clonestu=(Student)o;//定义个新Student对象
clonestu.p=(Professor)p.clone;//克隆个教授对象就赋给新Student对象
clonestu;//返回该新Student对象 实现带引用类型对象克隆
}
catch(Exception e)
{
e.prStackTrace;
null;
}
}
public String toString
{
"index="+index+","+"age="+age+","+"name="+name+
","+"Professor name="+p.name+","+"age="+p.age;
}
}
输出结果:

index=1,age=20,name=zhangshan,Professor name=林教授,age=21
index=1,age=20,name=lishi,Professor name=张教授,age=21
index=1,age=20,name=zhangshan,Professor name=林教授,age=21

由结果得知:克隆也实现了详细实现步骤请看注释
Tags:  java对象 java对象数组 java面向对象 java面向对象编程

延伸阅读

最新评论

发表评论