辅导:Java中包含引用数据类型对象的克隆实现
来源:优易学  2011-11-6 15:36:46   【优易学:中国教育考试门户网】   资料下载   IT书店

  在Java中,要得到一个对象的完整拷贝不能通过"="实现,因为这样只实现了该对象的引用的拷贝,如果对该对象进行操作,针对的还是同一个对象。
  那么,如何得到一个对象的拷贝?我们可以通过JAVA给我们提供的对象克隆机制来实现。并且不含引用类型的对象克隆实现与包含引用类型的对象的克隆实现有所不同。
  首先,看一下只包含基本数据类型的对象的克隆实现(请看下面的代码)
  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;
  }
  }
  输出结果:
  index=1,age=20,name=zhangshan
  index=1,age=20,name=lishi
  index=1,age=20,name=zhangshan
  我们可以看到我们修改stu2的name成员时,没有影响到stu1,说明获得对象的拷贝成功。
  下面我们继续看一下包含引用数据类型的对象的克隆实现。
  /
  要使一个类得到克隆功能有三步工作
  1.重定基类的clone方法并声明为public类型。
  2.在派生类的clone方法中调用super.clone()方法实现对象的克隆。
  3.在派生类中实现Cloneable接口。
  注意事项:
  如果被克隆的对象中有引用类型的数据成员,那么该引用类型
  也应该按以上三步实现克隆功能,青年人网站提示如下面的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);
  }
  }

[1] [2] 下一页

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训