为了使我们的对象能够被克隆,我们需要重写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 + "]"; } }