Heim  >  Artikel  >  Java  >  Beschreiben Sie kurz die clone()-Methode, die beim flachen Klonen und tiefen Klonen in Java zum Einsatz kommt

Beschreiben Sie kurz die clone()-Methode, die beim flachen Klonen und tiefen Klonen in Java zum Einsatz kommt

Y2J
Y2JOriginal
2017-05-04 10:11:072253Durchsuche

Java-Klonen (Klonen) ist eine der Funktionen der Java-Sprache. In diesem Artikel wird hauptsächlich die Funktionsweise des Klonmechanismus in Java vorgestellt. Freunde, die ihn benötigen, können darauf zurückgreifen.

Jetzt ist Klonen nicht mehr verfügbar Neues Ding Das Wort, mit dem Aufkommen von „Dolly“, ist dieses Wort tatsächlich „populär“. Nach einer Weile gibt es auch in Java ein solches Konzept, das es uns ermöglicht, einfach ein Objekt zu „erstellen“. Komm schon, schauen wir uns genauer an, wie der Klonmechanismus in Java funktioniert.

1. Klonen und Kopieren

Angenommen, es gibt jetzt ein Employee-Objekt, Employee tobby =new Employee("CMTobby",5000), normalerweise
wir haben eine solche Zuweisung Employee cindyelf=tobby, this Zu diesem Zeitpunkt habe ich einfach die Referenz kopiert. Sowohl Cindyelf als auch Tobby zeigten auf dasselbe Objekt im Speicher, sodass sich eine Operation von Cindyelf oder Tobby auf die andere Partei auswirken kann.

Wenn wir beispielsweise den Wert des Gehaltsfelds über die Methode cindyelf.raiseSalary() ändern, erhält Tobby über die Methode getSalary() den geänderten Wert des Gehaltsfelds. Dies ist offensichtlich nicht der Fall Was wir sehen wollen. Wir hoffen, eine exakte Kopie von Tobby zu erhalten, ohne uns gegenseitig zu beeinflussen. Zu diesem Zeitpunkt können wir Clone verwenden, um unsere Anforderungen zu erfüllen.

Employee cindy=tobby.clone(), ein neues Employee-Objekt wird generiert und hat die gleichen Attribute Werte und Methoden wie tobby.

2. Flaches Klonen und tiefes Klonen

Wie wird das Klonen durchgeführt? Das Objekt weiß nichts über ein Objekt, wenn es Klonen implementiert. Es führt lediglich eine Domänen-zu-Domänen-Kopie durch.

Auf diese Weise entsteht das Problem „Mitarbeiter“. Es handelt sich nicht um eine Basisvariable , sondern um eine Referenzvariable Nach dem Klonen wird ein neuer Verweis vom Typ Datum auf dasselbe Datumsobjekt wie das entsprechende Feld im ursprünglichen Objekt generiert. Auf diese Weise teilt die geklonte Klasse einen Teil der Informationen mit der ursprünglichen Klasse Offensichtlich nachteilig. Im Prozess Wie im Bild gezeigt:

Zu diesem Zeitpunkt müssen wir diese nicht grundlegenden Feldtypen tief klonen und eine spezielle Verarbeitung durchführen, z HireDay in diesem Beispiel. Wir können die Clone-Methode neu definieren und am HireDay eine spezielle Verarbeitung durchführen, wie im folgenden Code gezeigt:

 class Employee implements Cloneable 
{ 
  public Object clone() throws CloneNotSupportedException 
  { 
   Employee cloned = (Employee) super.clone(); 
  cloned.hireDay = (Date) hireDay.clone() 
  return cloned; 
  } 
}

3. Der Schutzmechanismus der Clone()-Methode

Clone() wird in Object als geschützt deklariert. Dies ist sinnvoll, indem man sie als geschützt deklariert , können Sie sicherstellen, dass nur die Employee-Klasse das Employee-Objekt „klonen“ kann. Informationen zum Prinzip finden Sie in meinen vorherigen Studiennotizen zu öffentlich, geschützt und privat.

4. Verwendung der Clone()-Methode

Die Verwendung der Clone()-Methode ist relativ einfach, achten Sie lediglich auf die folgenden Punkte:

a. Wann ein flaches Klonen und wann ein tiefes Klonen verwendet werden soll, hängt hauptsächlich von der Art der Domäne des jeweiligen Objekts ab. Der Grundtyp ist immer noch eine Referenzvariable

b. Die Klasse, zu der das Objekt gehört, das die Clone()-Methode aufruft, muss Clonable

interface

implementieren, andernfalls wird beim Aufruf der Clone-Methode eine CloneNotSupportedException ausgelöst.

Das obige ist der detaillierte Inhalt vonBeschreiben Sie kurz die clone()-Methode, die beim flachen Klonen und tiefen Klonen in Java zum Einsatz kommt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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