当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java Object clone()用法及代码示例


Java Object clone() 方法创建对象的浅拷贝。

在这里,浅拷贝意味着它创建一个新对象并复制与该对象关联的所有字段和方法。

用法:

object.clone()

参数:

clone() 方法不接受任何参数。

clone() 返回值

  • 返回对象的副本
  • 如果对象的类没有实现 Cloneable 接口,则抛出 CloneNotSupportedException

注意: 这Object类没有实现Cloneable.因此,我们不能称clone()对象的方法Object类。

示例 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() 方法制作了对象的浅拷贝。

要了解有关浅拷贝的更多信息,请访问What is Shallow Copy in Java?

我们在Java try...catch 块中包含了clone() 方法。这是因为如果无法克隆对象,子类可以抛出异常。

注意: 这Objectclass 是 Java 中所有类的超类。因此,每个类和数组都可以实现clone()方法。

相关用法


注:本文由纯净天空筛选整理自 Java Object clone()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。