Heim  >  Artikel  >  Java  >  Welche Bedeutung hat die clone()-Methode in Java?

Welche Bedeutung hat die clone()-Methode in Java?

王林
王林nach vorne
2023-09-14 14:25:02825Durchsuche

Mit der Methode

Welche Bedeutung hat die clone()-Methode in Java?

clone() wird eine Kopie eines Objekts einer Klasse erstellt, die die Schnittstelle Cloneable implementiert. Standardmäßig wird Feld für Feld kopiert, da die Object-Klasse die Mitglieder der spezifischen Klasse nicht kennt, deren Objekt diese Methode aufruft. Wenn die Klasse also nur über primitive Datentypelemente verfügt, wird eine neue Kopie des Objekts erstellt und ein Verweis auf die neue Kopie des Objekts zurückgegeben. Wenn die Klasse jedoch Mitglieder eines beliebigen Klassentyps enthält, werden nur die Objektverweise auf diese Mitglieder kopiert, sodass die Elementverweise sowohl im ursprünglichen als auch im geklonten Objekt auf dasselbe Objekt verweisen.

Wenn wir versuchen, die Methode clone() für ein Objekt einer Klasse aufzurufen, die die Schnittstelle Cloneable nicht implementiert, erhalten wir eine CloneNotSupportedException . Bei der Schnittstelle handelt es sich um eine getaggte Schnittstelle, deren Implementierung einfach angibt, dass die Methode Object.clone() für ein Objekt der implementierenden Klasse aufgerufen werden kann.

Syntax

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

Wir können die clone()-Methode auf zwei Arten implementieren

Flache Kopie

Dies ist das Ergebnis der standardmäßigen Klonfunktionalität, die von der Object.clone()-Methode bereitgestellt wird (wenn die Klasse auch nicht- grundlegende Datentypmitglieder). Beim flachen Kopieren verweist das geklonte Objekt auch auf dasselbe Objekt, auf das das Originalobjekt verweist, da nur die Objektreferenz kopiert wird und nicht das referenzierte Objekt.

Beispiel

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;
   }
}

Ausgabe

Welcome to Tutorialspoint!
Welcome to Tutorialspoint!

Deep Copy

Wir müssen das clone()Methodenmitglied für Nicht-Basistyp-Klassen überschreiben, um Deep Copy zu implementieren, da es auch das klonen muss Mitgliedsobjekt. Der Standard-Klonmechanismus führt dies nicht aus.

Beispiel

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;
   }
}

Ausgabe

Welcome to TutorialsPoint!
Welcome to

Das obige ist der detaillierte Inhalt vonWelche Bedeutung hat die clone()-Methode in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen