1 geschützte native Objekt Clone () wirft ClonenotsupportedException aus;
1. Methode, die durch native Schlüsselwörter geändert werden
Das native Schlüsselwort in Java zeigt an, dass diese Methode eine lokale Methode ist [Java Native Beschreibung]. Darüber hinaus ist die Ausführungseffizienz nativer Modifikationsmethoden höher als die von nicht nativen Modifikationen.
2. Die Methode wird durch geschütztes geändert
Wenn eine Klasse die Clone () -Methode überschreibt, muss sie in einen öffentlichen Zugriffsmodifikator geändert werden, um sicherzustellen, dass alle anderen Klassen auf diese Methode dieser Klasse zugreifen können.
3. Methode löst Clonenotsupportededexception -Ausnahme aus
Wenn eine Klasse die Clone () -Methode überschreiben möchte, muss die java.lang.clonable -Schnittstelle selbst implementiert werden, ansonsten wird eine ClonenotsupportedException geworfen.
2. Die Rolle von Clone ()
HINWEIS: Die hier spezifischen Objekte beziehen sich speziell auf komplexe Typen.
1. Einfach = Operation
Wir wissen, dass Objekte komplexer Typen in Java alle Referenztypen sind und häufig die Speicheradressen der Objekte speichern. Daher können wir den Wertvorgang nicht einfach als Operator zuweisen. Wir weisen einem anderen Objekt B ein Objekt A zu und weisen einfach die Speicheradresse von Objekt A nach B zu, damit beide auf dieselbe Speicheradresse hinweisen. Die Folge davon ist, dass Änderungen an einem der Objekte das andere Objekt beeinflussen. Die folgende Abbildung zeigt:
Person p1 = neuer Person (); Person p2 = p1;
2. Clone ()
Mit der Clone () -Methode können Sie schnell eine Kopie eines Objekts erstellen, und die beiden Objekte verweisen auf verschiedene Speicheradressen. Die folgende Abbildung zeigt:
Person p1 = neuer Person (); Person p2 = p1.clone ();
3. Flacher Klon und Tiefklon1, flacher Klon (flache Kopie)
Flacher Klon bezieht sich auf Felder im Klonobjekt selbst, nicht auf das Klonobjekt. Rufen Sie nur Super.clone () an, nur flacher Klon. Obwohl das kopierte Objekt auf verschiedene Speicheradressen hinweist, verweisen die Felder im Objekt immer noch auf dieselbe Speicheradresse wie das vorherige Objekt.
öffentliche Klasse Shallowclone implementiert klonbares {public String Name; öffentliches int Alter; öffentliche Person Person; public Shallowclone () {} public Shallowclone (Zeichenfolge Name, int Alter, Person Person) {this.name = name; this.age = Alter; this.person = Person; } @Override public Shallowclone Clone () {Shallowclone c = null; try {c = (Shallowclone) Super.clone (); Rückkehr C; } catch (clonenotsUsPortedexception e) {e.printstacktrace (); } return c; } public static void main (String [] args) {Person p = new Person (); P.Name = "P"; P.age = 10; Shallowclone C1 = neuer Sachklon ("Jim", 18, p); System.out.printf ("vor Klon: C1 = %s, c1.person = %s/n", c1, c1.person); Shallowclone C2 = C1.Clone (); System.out.printf ("After Clone: C2 = %s, c2.person = %s/n", c2, c2.person); }}Main () ausführen: Ausgabe:
Vor dem Klon: c1 = Cre.Sample.test.object.sallowclone@558385e3, c1.person = Cre.Sample.test.person@2dcb25f1after Clone: C2 = Cre.Sample.Tich.Sterson.Schlone@742808B3, C2.person = CRE.Test.test.sperson.person.person.person@742808b3, C2.p.
Auf diese Weise hat sich die Speicheradresse des flachen Objekts geändert, aber die Speicheradresse des Feldes Person im Objekt hat sich nicht geändert.
2. Deep Clone (Deep Copy)
Tiefes Klon bezieht sich auf die Felder im Klonobjekt selbst und auch auf das Klonobjekt.
/*** Beispiel für Deep Clone Code* Erstellt von Cregu am 2016/6/9. */public class Deepclone implementiert klonbares {public String name; öffentliches int Alter; öffentliche Person Person; public DeepClone () {} public DeepClone (String -Name, int Alter, Person Person) {this.name = name; this.age = Alter; this.person = Person; } @Override public DeepClone Clone () {Deepclone c = null; try {c = (DeepClone) Super.clone (); C.Person = Person.clone (); Rückkehr C; } catch (clonenotsUsPortedexception e) {e.printstacktrace (); } return c; } public static void main (String [] args) {Person p = new Person (); P.Name = "P"; P.age = 10; Deepclone C1 = neuer Deepclone ("Jim", 18, p); System.out.printf ("vor Klon: C1 = %s, c1.person = %s/n", c1, c1.person); DeepClone C2 = C1.Clone (); System.out.printf ("After Clone: C2 = %s, c2.person = %s/n", c2, c2.person); }}Main () ausführen: Ausgabe:
Vor dem Klon: c1 = Cre.Sample.test.object.deepclone@558385e3, c1.person = Cre.Sample.test.person@2dcb25f1after Clone: C2 = CRE.Sample.test.object.deepclone@742808b3, C2.p.
In diesem Fall hat sich die Speicheradresse des Deepclone -Objekts geändert, aber auch die Speicheradresse des Feldes Person im Objekt hat sich geändert.
Die obige umfassende Analyse der Klonmethode des Java -Objekts ist der gesamte Inhalt, den ich mit Ihnen teile. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.