这里,浅拷贝意味着它创建一个新对象并复制与该对象关联的所有字段和方法。
clone()
方法的语法是:
object.clone()
clone() 参数
clone()
方法不带任何参数。
clone() 返回值
返回对象的副本 抛出CloneNotSupportedException
如果对象的类没有实现 Cloneable
接口
注意: Object 类没有实现 Cloneable。因此,我们不能为 Object 类的对象调用 clone() 方法。
示例 1: Java clone()
class Main implements Cloneable { // declare variables String name; int version; public static void main(String[] args) { // create an object of Main class Main obj1 = new Main(); // initialize name and version using obj1 obj1.name = "Java"; obj1.version = 14; // print variable System.out.println(obj1.name); // Java System.out.println(obj1.version); // 14 try { // create clone of obj1 Main obj2 = (Main)obj1.clone(); // print the variables using obj2 System.out.println(obj2.name); // Java System.out.println(obj2.version); // 14 } catch (Exception e) { System.out.println(e); } } }
在上面的例子中,我们创建了一个名为
Main 的类。该类包括两个字段
name 和
version。在这里,我们使用类的对象
obj1 初始化了类字段。
注意这一行,
Main obj2 = (Main)obj1.clone();
在这里,我们使用了
clone()
方法来创建
obj1 的副本。
clone()
返回的值被分配给对象
obj2。由于
clone()
的返回值是
Object
类型,我们使用
(Main)
将其转换为
Main 输入。
现在可以使用对象
obj2 访问字段
name 和
version。但是,如果我们使用
obj2 更改字段的值,与
obj1 关联的值将不会更改。
示例 2: 使用克隆对象更改值
class Main implements Cloneable { // declare variables String name; int version; public static void main(String[] args) { // create an object of Main class Main obj1 = new Main(); // initialize name and version using obj1 obj1.name = "Java"; obj1.version = 14; // print variable System.out.println(obj1.name); // Java System.out.println(obj1.version); // 14 try { // create a clone of obj1 Main obj2 = (Main)obj1.clone(); // print the variables using obj2 System.out.println(obj2.name); // Java System.out.println(obj2.version); // 14 // changing value of name // using obj2 obj2.name = "Python"; System.out.println(obj2.name); // Python // check if value associated // with obj1 is changed System.out.println(obj1.name); // Java } catch (Exception e) { System.out.println(e); } } }
注意这一行,
obj2.name = "Python";
在这里,我们使用
obj2 更改了变量的值。现在,当我们打印
obj1 和
obj2 的变量名时,我们可以看到
obj1 的值没有改变。这是因为
clone()
方法制作了对象的浅拷贝。
要了解有关浅拷贝的更多信息,请访问 Java 中的浅拷贝是什么?
我们在 Java try...catch 中包含了
clone()
方法 块。这是因为如果无法克隆对象,子类会抛出异常。
注意: Object 类是 Java 中所有类的超类。因此,每个类和数组都可以实现 clone() 方法。