《JAVA克隆》

一、克隆的两种方式。java

    a、浅度克隆。让须要你须要克隆的类实现Cloneable这个接口。在调用super.clone这个方法完成克隆。代码以下this

public class User implements Cloneable{
 private String name;
 private String address;
 private Dog dog;
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getAddress() {
  return address;
 }
 public void setAddress(String address) {
  this.address = address;
 }
 public Dog getDog() {
  return dog;
 }
 public void setDog(Dog dog) {
  this.dog = dog;
 }
 public  Object getObject(){
  Object obj=null;
  try {
   obj=super.clone();
  } catch (CloneNotSupportedException e) {
   e.printStackTrace();
  }
  return obj;
 }
} 
 
public class Dog {
 private String name;
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
}

    b、深度克隆。让你须要克隆的类以及该类设计的全部类都要实现Serializable这个标记性接口。让后进行流操做,完成克隆。代码以下:设计

public class User implements Serializable{
 private String name;
 private String address;
 private Dog dog;
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getAddress() {
  return address;
 }
 public void setAddress(String address) {
  this.address = address;
 }
 public Dog getDog() {
  return dog;
 }
 public void setDog(Dog dog) {
  this.dog = dog;
 }
public Object deepClone(){

  Object obj=null;

  try {

   ByteArrayOutputStream bos=new ByteArrayOutputStream();

   ObjectOutputStream oos=new ObjectOutputStream(bos);

   oos.writeObject(this);

   ByteArrayInputStream bis=new ByteArrayInputStream(bos.toByteArray());

   ObjectInputStream ois=new ObjectInputStream(bis);

   obj=ois.readObject();

  } catch (Exception e) {

   e.printStackTrace();

  }

  return obj;

 } 
} 

public class Dog implements Serializable {
 private String name;
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
}

综上所述,咱们不难发现,浅度克隆其实就是把你须要克隆的类彻底的复制一份。而深度克隆则是把该类的属性和方法进行复制,引用的其余类则是新的对象。code

相关文章
相关标签/搜索