java如何克隆对象
克隆对象的方法
在Java中克隆对象可以通过多种方式实现,以下是常见的几种方法:
实现Cloneable接口并重写clone方法
Java提供了Cloneable接口和Object类中的clone()方法来实现对象克隆。需要克隆的类必须实现Cloneable接口并重写clone()方法。
public class MyClass implements Cloneable {
private int value;
@Override
public MyClass clone() throws CloneNotSupportedException {
return (MyClass) super.clone();
}
}
使用示例:

MyClass original = new MyClass();
MyClass cloned = original.clone();
使用复制构造函数
通过定义一个接受同类对象作为参数的构造函数来实现克隆。
public class MyClass {
private int value;
public MyClass(MyClass other) {
this.value = other.value;
}
}
使用示例:

MyClass original = new MyClass();
MyClass cloned = new MyClass(original);
使用序列化实现深克隆
通过将对象序列化为字节流再反序列化来实现深克隆,适用于需要完全独立副本的情况。
import java.io.*;
public class SerializationUtil {
public static <T extends Serializable> T clone(T object) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(object);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais);
return (T) ois.readObject();
} catch (IOException | ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
}
使用示例:
MyClass original = new MyClass();
MyClass cloned = SerializationUtil.clone(original);
使用第三方库
Apache Commons Lang库提供了SerializationUtils.clone()方法,可以简化序列化克隆过程。
import org.apache.commons.lang3.SerializationUtils;
MyClass original = new MyClass();
MyClass cloned = SerializationUtils.clone(original);
注意事项
- 浅克隆与深克隆:默认的
clone()方法是浅克隆,只复制基本类型和对象引用。如需深克隆,需要手动处理引用类型的克隆。 Cloneable接口是标记接口,不包含任何方法。- 重写
clone()方法时应将其访问修饰符改为public。 - 使用序列化方法时,所有涉及的对象都必须实现
Serializable接口。






