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

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

王林
Freigeben: 2023-09-14 14:25:02
nach vorne
872 Leute haben es durchsucht

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>
Nach dem Login kopieren

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;
   }
}
Nach dem Login kopieren

Ausgabe

Welcome to Tutorialspoint!
Welcome to Tutorialspoint!
Nach dem Login kopieren

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;
   }
}
Nach dem Login kopieren

Ausgabe

Welcome to TutorialsPoint!
Welcome to
Nach dem Login kopieren

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!

Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage