java克隆对象的方法有哪些

avatar
作者
筋斗云
阅读量:2

在Java中,克隆对象的方法有以下几种:

  1. 实现Cloneable接口并重写clone()方法:该方法是Object类中的方法,需要在自定义类中重写该方法并使用super.clone()方法来创建并返回一个新的对象。
public class MyClass implements Cloneable { private int value; public MyClass(int value) { this.value = value; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } @Override public Object clone() throws CloneNotSupportedException { return super.clone(); } } 

使用方式:

MyClass obj1 = new MyClass(10); try { MyClass obj2 = (MyClass) obj1.clone(); System.out.println(obj1.getValue());  // 输出:10 System.out.println(obj2.getValue());  // 输出:10 obj2.setValue(20); System.out.println(obj1.getValue());  // 输出:10 System.out.println(obj2.getValue());  // 输出:20 } catch (CloneNotSupportedException e) { e.printStackTrace(); } 
  1. 使用拷贝构造函数:在自定义类中添加一个接受同类型对象的构造函数,将其属性值拷贝到当前对象中。
public class MyClass { private int value; public MyClass(int value) { this.value = value; } public MyClass(MyClass obj) { this.value = obj.value; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } } 

使用方式:

MyClass obj1 = new MyClass(10); MyClass obj2 = new MyClass(obj1); System.out.println(obj1.getValue());  // 输出:10 System.out.println(obj2.getValue());  // 输出:10 obj2.setValue(20); System.out.println(obj1.getValue());  // 输出:10 System.out.println(obj2.getValue());  // 输出:20 
  1. 使用序列化和反序列化:将对象写入字节流中,然后从字节流中读取出来,实现对象的复制。
import java.io.*; public class MyClass implements Serializable { private int value; public MyClass(int value) { this.value = value; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } } 

使用方式:

MyClass obj1 = new MyClass(10); try { ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(obj1); ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bis); MyClass obj2 = (MyClass) ois.readObject(); System.out.println(obj1.getValue());  // 输出:10 System.out.println(obj2.getValue());  // 输出:10 obj2.setValue(20); System.out.println(obj1.getValue());  // 输出:10 System.out.println(obj2.getValue());  // 输出:20 } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } 

以上是常见的克隆对象的方法,根据具体的需求选择适合的方法进行克隆。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!