Heim >Java >javaLernprogramm >Objektklonen in Java

Objektklonen in Java

WBOY
WBOYOriginal
2024-08-30 16:04:50829Durchsuche

Java ist eine der am weitesten verbreiteten Programmiersprachen und verfügt über eine Vielzahl von Merkmalen und Funktionen. Ein Objekt in Java wird verwendet, um die Aufgabe zu erledigen; Sie erstellen Objekte, ändern, verschieben, rufen ihre jeweiligen Methoden auf usw. Wie wir alle wissen, werden Verweise auf die Objekte in Java gespeichert. Wenn wir also zwei Referenzen haben, die auf dasselbe Objekt verweisen, werden Änderungen bei einem Objekt vollständig in denselben Änderungen bei dem anderen Objekt widergespiegelt. Nun wirkt sich dieser Faktor möglicherweise nicht immer zu unseren Gunsten aus, daher ist das Klonen die Antwort, um solche Situationen zu verhindern. Mit anderen Worten: Das Erstellen einer exakten Kopie solcher Objekte wird in Java als Objektklonen bezeichnet.

Starten Sie Ihren kostenlosen Softwareentwicklungskurs

Webentwicklung, Programmiersprachen, Softwaretests und andere

Per Definition ist das Klonen von Objekten der Prozess der Erstellung einer exakten Kopie eines Originalobjekts mit einem ähnlichen Zustand. Beim Klonen werden alle Eigenschaften auf das neu geklonte Objekt übertragen, diese Eigenschaften können jedoch je nach Bedarf geändert oder manipuliert werden. Die clone()-Methode muss in der Object-Klasse definiert werden. Die Implementierung der klonbaren Schnittstelle java.lang.A ist für die Klasse, in der wir das Objekt klonen möchten, obligatorisch. Falls die Implementierung der klonbaren Schnittstelle fehlschlägt, wird eine Ausnahme ausgelöst. Werfen wir nun einen Blick auf die Syntax für das Klonen von Objekten.

Syntax:

protected Object clone() throws CloneNotSupportedException

Für die Klasse Object werden bestimmte Klonvorgänge von der Klonmethode ausgeführt. Diese Methode erstellt ein exaktes Duplikat der Klasse und initialisiert alle Felder mit dem Inhalt der Objektfelder. Wenn die Schnittstelle Cloneable nicht von der Klasse des genannten Objekts implementiert wird, wird eine „CloneNotSupportedException“ ausgelöst. Es wird davon ausgegangen, dass alle Arrays die klonbare Schnittstelle implementieren. Hier ist die Schnittstelle Cloneable nicht auf der Klasse Object implementiert. Wenn wir also die Klonmethode für ein Objekt aufrufen, wird ein Laufzeitfehler ausgegeben.

Funktionsweise des Objektklonens in Java

Lassen Sie uns nun die Funktionsweise der clone()-Methode anhand einer Demonstration verstehen.

Code:

class obj_clone implements Cloneable{
int phone_code;
String f_name;
obj_clone(int phone_code,String f_name){
this.phone_code=phone_code;
this.f_name=f_name;
}
public Object clone()throws CloneNotSupportedException{
return super.clone();
}
public static void main(String args[]){
try{
obj_clone s1=new obj_clone(99,"sulaksh");
obj_clone s2=(obj_clone)s1.clone();
System.out.println(s1.phone_code+" "+s1.f_name);
System.out.println(s2.phone_code+" "+s2.f_name);
}catch(CloneNotSupportedException c){}
}
}

Code-Erklärung: Wie Sie sehen können, haben wir unsere Klasse initialisiert und klonbar implementiert. Hier wird überprüft, ob die tatsächliche Klasse das Klonbare implementiert, mit clone() im Objekt und dann mit der Erstellung einer Kopie fortgefahren. Dann haben wir unsere beiden Variablen „Telefonnummer“ mit dem Datentyp „Integer“ und „Vorname“ mit dem Datentyp „String“. Anschließend haben wir einen Konstruktor unserer Klasse obj_clone zusammen mit den Variablen mit dem Schlüsselwort .this erstellt. Wie Sie sehen können, haben wir unser Objekt mit der Methode clone() und der Ausnahme CloneNotSupportedException, die wir zuvor besprochen haben. Darüber hinaus wird super.clone() hier möglicherweise den Fehler CloneNotSupportedException auslösen, den wir später abgefangen haben.

Dann haben wir unsere Hauptklasse und wir haben für alles darin einen Try-Catch verwendet. Anschließend haben wir ein Objekt unserer Klasse als s1 und s2 erstellt. Wir haben beide Parameter für s1, unser erstes Objekt, übergeben und dann die clone()-Methode implementiert, um s1 in s2 zu klonen. Schließlich haben wir zwei Ausgabedruckanweisungen. Außerhalb des Try-Blocks haben wir unseren Catch-Block mit der zuvor besprochenen Ausnahme. In der 8ten Zeile des Beispiels haben wir clone() wie im Syntaxteil erwähnt und erläutert implementiert. Bei der Ausführung gibt das obige Programm die Ausgabe als „99sulaksh 99sulaksh“ aus. Die Ausgabe finden Sie im unten angehängten Screenshot.

Ausgabe:

Objektklonen in Java

Arten des Objektklonens in Java

Da wir nun verstanden haben, was das Klonen von Objekten ist und wie es durchgeführt wird, wollen wir nun verstehen, welche Arten des Klonens Java unterstützt.

  • Flaches Klonen: Immer wenn die Standard-Klonmethode implementiert ist, erfolgt flaches Klonen. Shallow Cloning kopiert einfach alle Felder des Objekts in die neue Instanz. Flaches Klonen wird von clone() unterstützt.
  • Deep Cloning: Jedes Mal, wenn wir die Standard-Klonmethode nicht implementieren, praktizieren wir Deep Cloning. Deep Cloning funktioniert nach unseren Bedürfnissen. Der Hauptunterschied besteht hier darin, dass Deep Cloning alle Felder zusammen mit den Objektwerten kopiert, während Shallow Cloning nur die Felder kopiert.
  • Lazy Cloning: Es gibt eine dritte Art des Klonens, die in Java unterstützt wird. Dabei handelt es sich um eine Kombination der beiden oben genannten Arten des Klonens; es ist als Lazy Cloning bekannt. Und es gibt keine spezifische Regel, wann welcher Klontyp verwendet werden soll; Es liegt an uns, entsprechend unseren Bedürfnissen zu entscheiden.

Vor- und Nachteile des Objektklonens

Lassen Sie uns nun die Vor- und Nachteile des Objektklonens verstehen.

Vorteile

Da alles oder jede Methode ihre eigenen Einschränkungen und Funktionen hat, sind im Folgenden die Vorteile des Klonens aufgeführt.

  • Es spart Zeit und Arbeit, da das Klonen eine zeitsparende Methode ist; Sie müssen nicht die gleichen langen Codes schreiben.
  • Bei der Implementierung bereits entwickelter Projekte ist das Klonen die effizienteste Methode zum Kopieren von Objekten.
  • Es verfügt über die schnellste Methode zum Kopieren von Arrays mit Clone().

Nachteile

Wie bereits erwähnt, hat jede Methode ihre Einschränkungen und Funktionen. Lassen Sie uns nun die Nachteile von Clone() verstehen.

  • Damit JVM versteht, dass wir clone() verwenden werden, müssen wir die klonbare Schnittstelle implementieren, auch wenn diese klonbare Schnittstelle keine Methoden hat.
  • Im Falle von Deep Cloning müssen wir object.clone() überschreiben, da es grundsätzlich flaches Klonen unterstützt.
  • Wir haben keine Kontrolle über die Objektkonstruktion, da clone() keinen Konstruktor aufruft.
  • Grundsätzlich müssen wir zur Implementierung von object.clone() einige Änderungen in unserem Code vornehmen, angefangen bei der Implementierung der Cloneable-Schnittstelle, dann der Definition der clone()-Methode bis hin zur Behandlung von CloneNotSupportedException usw.

Mit dem richtigen Verständnis der Vor- und Nachteile von clone() oder einer anderen Methode kann die Implementierung solch wunderbarer Methoden und Funktionen für den Programmierer von großem Nutzen sein.

Fazit

Wir haben verstanden, was clone() ist, welche Funktionalität und welche Verwendung es hat. Unterschied zwischen tiefem und flachem Klonen sowie Lazy Cloning. Flaches Klonen kopiert nur die Felder, während tiefes Klonen die Felder und Werte kopiert und je nach Bedarf implementiert werden kann. Während Lazy Copy eine Kombination aus beidem ist. Wir haben auch die Vor- und Nachteile von Klonen verstanden ().

Das obige ist der detaillierte Inhalt vonObjektklonen in Java. 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
Vorheriger Artikel:Sammlungsschnittstelle in JavaNächster Artikel:Sammlungsschnittstelle in Java