Java如何克隆对象?
为了使我们的对象能够被克隆,我们需要重写Object类克隆方法。我们也可以java.lang.Cloneable在我们的类中添加一个接口,该接口是一个空接口。当我们调用该clone()方法时,我们需要添加一个try-catch块来捕获CloneNotSupportedException。如果我们尝试克隆一个不应该克隆的对象,则将抛出此异常。
调用该clone()方法会在Java虚拟机(JVM)内进行有状态的浅表复制。它创建一个新对象,并将所有字段从旧对象复制到新创建的对象中。
package org.nhooo.example.lang;
public class CloneDemo implements Cloneable {
private int number;
private transient int data;
/**
* @return
* @throws CloneNotSupportedException
*/
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
public static void main(String[] args) {
CloneDemo clone = new CloneDemo();
clone.number = 5;
clone.data = 1000;
try {
//创建一个CloneDemo对象的副本。当我们改变值
//克隆对象中的数字和数据字段,它不会影响
//原始对象。
CloneDemo objectClone = (CloneDemo) clone.clone();
objectClone.number = 10;
objectClone.data = 5000;
System.out.println("cloned object = " + objectClone);
System.out.println("origin object = " + clone);
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
public String toString() {
return "[number = " + number + "; data = " + data + "]";
}
}