Java教程

Java Object clone()

Java Object clone()

Java Object clone() 方法创建对象的浅拷贝。
这里,浅拷贝意味着它创建一个新对象并复制与该对象关联的所有字段和方法。
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 的类。该类包括两个字段 nameversion。在这里,我们使用类的对象 obj1 初始化了类字段。
注意这一行,
Main obj2 = (Main)obj1.clone();
在这里,我们使用了 clone() 方法来创建 obj1 的副本。 clone() 返回的值被分配给对象 obj2。由于 clone()的返回值是 Object类型,我们使用 (Main)将其转换为 Main 输入。
现在可以使用对象 obj2 访问字段 nameversion。但是,如果我们使用 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 更改了变量的值。现在,当我们打印 obj1obj2 的变量名时,我们可以看到 obj1 的值没有改变。这是因为 clone() 方法制作了对象的浅拷贝。
要了解有关浅拷贝的更多信息,请访问 Java 中的浅拷贝是什么?
我们在 Java try...catch 中包含了 clone() 方法 块。这是因为如果无法克隆对象,子类会抛出异常。
注意: Object 类是 Java 中所有类的超类。因此,每个类和数组都可以实现 clone() 方法。
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4