首頁 >Java >java教程 >在Java中,clone()方法的重要性是什麼?

在Java中,clone()方法的重要性是什麼?

王林
王林轉載
2023-09-14 14:25:02877瀏覽

在Java中,clone()方法的重要性是什麼?

clone()方法用於建立實作Cloneable介面的類別的物件副本。預設情況下,它會逐字段複製,因為 Object 類別不知道其物件呼叫此方法的特定類別的成員。因此,如果該類別僅具有原始資料類型成員,則將建立該物件的新副本,並傳回對新物件副本的參考。但是,如果類別包含任何類別類型的成員,則僅複製對這些成員的物件引用,因此原始物件和複製物件中的成員引用都引用相同物件。

如果我們嘗試對未實作 Cloneable  介面的類別的物件呼叫 clone() 方法,我們將收到 CloneNotSupportedException  。此介面是一個標記介面,該介面的實作僅表示可以在實作類別的物件上呼叫Object.clone()方法。

語法

<strong>protected Object clone() throws CloneNotSupportedException</strong>

我們可以透過兩種方式實作clone()方法

#淺複製

這就是Object.clone()提供的預設克隆功能的結果 方法(如果類別也有非基本資料型別成員)。在淺複製的情況下,複製物件也會引用原始物件所引用的相同對象,因為僅複製物件引用,而不複製引用的物件。

範例

public class ShallowCopyTest {
   public static void main(String args[]) {
      A a1 = new A();
      A a2 = (A) a1.clone();
      a1.sb.append("Tutorialspoint!");
      System.out.println(a1);
      System.out.println(a2);
   }
}
class A implements Cloneable {
   public StringBuffer sb = new StringBuffer("Welcome to ");
      public String toString() {
         return sb.toString();
      }
   public Object clone() {
      try {
         return super.clone();
      } catch(CloneNotSupportedException e) {
      }
      return null;
   }
}

輸出

Welcome to Tutorialspoint!
Welcome to Tutorialspoint!

#深度複製

我們需要為非基本類型的類重寫clone()方法成員來實作深度複製,因為它還需要複製成員對象,而預設複製機制不會這樣做。

範例

public class DeepCopyTest {
   public static void main(String args[]) {
      A a1 = new A();
      A a2 = (A) a1.clone();
      a1.sb.append(" TutorialsPoint!");
      System.out.println(a1);
      System.out.println(a2);
   }
}
class A implements Cloneable {
   public StringBuffer sb = new StringBuffer("Welcome to ");
   public String toString() {
      return sb.toString();
   }
   public Object clone() {
      try {
         A a = (A) super.clone();
         a.sb = new StringBuffer(sb.toString());
         return a;
      }
      catch(CloneNotSupportedException e) {
      }
      return null;
   }
}

輸出

Welcome to TutorialsPoint!
Welcome to

以上是在Java中,clone()方法的重要性是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除