當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。