Was ist das Klonen in Java und seinen Typen?



Dieser Artikel zum Klonen in Java gibt Ihnen detaillierte Einblicke in den Klonprozess und die verschiedenen Arten des Klonens, die von Java unterstützt werden.

Während der Programmierung stoßen wir häufig auf Szenarien, in denen wir einen vollständigen Code wiederverwenden müssen. Durch das Umschreiben des Codes wird das Programm sperrig, während gleichzeitig die Effizienz des Programms verringert wird. Somit bietet uns Java eine hervorragende Funktion, die aus dieser lästigen Aufgabe heraus gerettet werden kann. Dies ist in Java als Klonen bekannt. In diesem Artikel werde ich Ihnen vollständige Einblicke geben.

Im Folgenden sind die Themen aufgeführt, die ich in diesem Artikel behandeln werde:





Klonen in Java

Beim Klonen von Objekten in Java wird eine exakte Kopie des Originalobjekts erstellt. Mit anderen Worten, es ist eine Möglichkeit, ein neues Objekt zu erstellen, indem alle Daten und Attribute vom ursprünglichen Objekt kopiert werden. Dies ist nur durch die Implementierung der clone () -Methode von möglich java.lang.Object Klasse. Die Klonmethode erstellt eine genaue Kopie eines Objekts, für das es erstellt wurdeWird in einer Feld-für-Feld-Zuordnungsreihenfolge aufgerufen und gibt die neue Objektreferenz zurück . Eine Sache, an die Sie in Java denken müssen: Die Objekte, die die Klonschnittstelle implementieren, die eine Markierungsschnittstelle ist, dürfen den Klon () verwenden.

wie man eine Warnung in Javascript macht

Nachdem Sie nun wissen, was in Java geklont wird, sehen wir verschiedene Vorteile der Verwendung dieser Funktion.



Vorteile des Klonens in Java

Im Folgenden habe ich einige der faszinierendsten Funktionen der Verwendung des Klonens in Java aufgelistet.

  • Hilft beim Reduzieren der Codezeilen.
  • Die effektivste und effizienteste Art zu kopierenObjekte.
  • Außerdem wird clone () als die schnellste Methode zum Kopieren eines Arrays angesehen.

Hinweis: Die Verwendung des Klonens kann zwar zu einigen Designproblemen führen, aber wenn Sie es strategisch richtig einsetzen, kann es Ihnen zugute kommen.

Arten des Klonens in Java

Das Klonen in Java kann gruppiert werdenin zwei Kategorien:



  1. Flaches Klonen
  2. Tiefes Klonen

Lassen Sie uns jeden von ihnen einzeln verstehen.

Flaches Klonen

Wenn der Klonprozess in Java durch Aufrufen der clone () -Methode ausgeführt wird, wird er als Shallow Cloning bezeichnet. Dies ist der Standardklonprozess in Java, bei dem eine flache Kopie des Originalobjekts mit genauem Feld erstellt wird. Wenn das ursprüngliche Objekt Verweise auf einige andere Objekte als Felder enthält, werden anstelle der Erstellung neuer Objekte nur die Verweise auf dieses Objekt geklont. Mit anderen Worten, wenn Sie den Wert der geklonten Objekte ändern, wird dies auch im Original wiedergegeben. Somit ist das flache Klonen vom ursprünglichen Objekt abhängig.

Installieren Sie PHP unter Windows 7

flache Kopie - Klonen in Java - EdurekaUnten habe ich das gleiche Beispiel gegeben:

Paket edureka Klasse EduCourse {String Kurs1 String Kurs2 String Kurs3 public EduCourse (String crs1, String crs2, String crs3) {this.course1 = crs1 this.course2 = crs2 this.course3 = crs3}} Klasse EduLearner implementiert Cloneable {int eduId String learnerName EduCourse eduCourse public EduLearner (int eduId, String learnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = learnerName this.eduCourse = eduCourse} // Standardversion von clone () method protected Object clone () löst CloneNotS .clone ()}} öffentliche Klasse ShallowCloneSample {public static void main (String [] args) {EduCourse j2ee = neuer EduCourse ('Java', 'Spring', 'Microservices') EduLearner learner1 = neuer EduLearner (2811, 'Max' , j2ee) EduLearner learner2 = null try {// Erstellen eines Klons von learner1 und Zuweisen zu learner2 learner2 = (EduLearner) learner1.clone ()} catch (CloneNotSupportedException e) {e.printStackTrace ()} // Druckdetails von Learner1 System.out.p rintln ('Details zu Lerner 2:') System.out.println ('Id:' + learner1.eduId) System.out.println ('Name:' + learner1.learnerName) System.out.println ('Kurs-ID:' '+ learner1.eduCourse) // Drucken aller Kurse von' learner1 'System.out.println (' Kurse von Learner 1: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1). eduCourse.course2) System.out.println (learner1.eduCourse.course3) // Druckdetails von Learner2 System.out.println ('Details von Learner 2:') System.out.println ('Id:' + learner2.eduId ) System.out.println ('Name:' + learner2.learnerName) System.out.println ('Kurs-ID:' + learner2.eduCourse) // Drucken aller Kurse von 'learner2' System.out.println ('Kurse von Lernenden 2: ') System.out.println (learner2.eduCourse.course1) System.out.println (learner2.eduCourse.course2) System.out.println (learner2.eduCourse.course3) // Ändern des Kurses3 von' learner2 'learner2.eduCourse.course3 =' JSP '// Diese Änderung wird im ursprünglichen' learner1 'System.out.println (' Aktualisierte Kurse von Lerner 2: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1.eduCourse.course2) System.out.println (learner1.eduCourse.course3)}}

Ausgabe:

Details zu Lernenden 2: ID: 2811 Name: Max. Kurs-ID: EduCourse @ 15db9742 Kurse von Lernenden 1: Java Spring Microservices Details zu Lernenden 2: ID: 2811 Name: Max. Kurs-ID: EduCourse @ 15db9742 Kurse von Lernenden 2: Java Spring Microservices Aktualisierte Kurse von Lerner 2: Java Spring JSP

Deep Cloning in Java

Wenn in Java der Klonprozess durch Implementieren der klonbaren Schnittstelle durchgeführt wird, wird er als Deep Cloning bezeichnet. Bei dieser Art des Klonens wird eine genaue Kopie aller Felder des ursprünglichen Objekts erstellt. Falls das ursprüngliche Objekt jedoch Verweise auf andere Objekte als Felder enthält, wird eine Kopie dieser Objekte auch durch Aufrufen der clone () -Methode erstellt. Dadurch wird das geklonte Objekt unabhängig vom ursprünglichen Objekt, und Änderungen an einem der Objekte werden nicht auf das andere Objekt übertragen.

Finde das größte Element in Array Java

Unten habe ich das gleiche Beispiel gegeben:

Paket edureka Klasse EduCourse implementiert Cloneable {String Kurs1 String Kurs2 String Kurs3 public EduCourse (String crs1, String crs2, String crs3) {this.course1 = crs1 this.course2 = crs2 this.course3 = crs3} protected Object clone () löst CloneNotSupportedException {aus return super.clone ()}} Klasse EduLearner implementiert Cloneable {int eduId String learnerName EduCourse eduCourse public EduLearner (int eduId, String learnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = learnerName this.eduCame Das Überschreiben der Methode clone () zum Erstellen einer tiefen Kopie eines objektgeschützten Objekts clone () löst die öffentliche Klasse CloneNotSupportedException {EduLearner learner = (EduLearner) super.clone () learner.eduCourse = (EduCourse) eduCourse.clone () return learner}} aus DeepCloneSample {public static void main (String [] args) {EduCourse j2ee = neuer EduCourse ('Java', 'Spring', 'Microservices') EduLearner learner1 = neuer EduLearner (2811, 'Max', j2ee) EduLearner lernen er2 = null try {// Erstellen eines Klons von learner1 und Zuweisen zu learner2 learner2 = (EduLearner) learner1.clone ()} catch (CloneNotSupportedException e) {e.printStackTrace ()} // Drucken von Details von Learner1 System.out. println ('Details zu Lerner 2:') System.out.println ('ID:' + learner1.eduId) System.out.println ('Name:' + learner1.learnerName) System.out.println ('Kurs-ID:' '+ learner1.eduCourse) // Drucken aller Kurse von' learner1 'System.out.println (' Kurse von Learner 1: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1). eduCourse.course2) System.out.println (learner1.eduCourse.course3) // Druckdetails von Learner2 System.out.println ('Details von Learner 2:') System.out.println ('Id:' + learner2.eduId ) System.out.println ('Name:' + learner2.learnerName) System.out.println ('Kurs-ID:' + learner2.eduCourse) // Drucken aller Kurse von 'learner2' System.out.println ('Kurse von Lernenden 2: ') System.out.println (learner2.eduCourse.course1) System.out.printl n (learner2.eduCourse.course2) System.out.println (learner2.eduCourse.course3) // Ändern des Kurses3 von 'learner2' learner2.eduCourse.course3 = 'JSP' // Diese Änderung wird nicht im Original wiedergegeben. ' learner1 'System.out.println (' Kurse von Learner 1: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1.eduCourse.course2) System.out.println (learner1.eduCourse. Kurs3) // Aktualisierte Kurse des Lernenden2 System.out.println ('Kurse des Lernenden 2:') System.out.println (learner2.eduCourse.course1) System.out.println (learner2.eduCourse.course2) System.out. println (learner2.eduCourse.course3)}}

Ausgabe:

Details zu Lernenden 2: ID: 2811 Name: Max. Kurs-ID: edureka.EduCourse@15db9742 Kurse von Lernenden 1: Java Spring Microservices Details zu Lernenden 2: ID: 2811 Name: Max. Kurs-ID: edureka.EduCourse@6d06d69c Kurse von Lernenden 2 : Java Spring Microservices Kurse für Lernende 1: Java Spring Microservices Kurse für Lernende 2: Java Spring JSP

Dies bringt uns zum Ende dieses Artikels über das Klonen in Java. Wenn Sie mehr über Java erfahren möchten, können Sie sich auf unsere beziehen .

Nachdem Sie verstanden haben, was ein Klonen in Java ist, lesen Sie die von Edureka, einem vertrauenswürdigen Online-Lernunternehmen mit einem Netzwerk von mehr als 250.000 zufriedenen Lernenden auf der ganzen Welt. Der Java J2EE- und SOA-Schulungs- und Zertifizierungskurs von Edureka richtet sich an Studenten und Fachleute, die Java-Entwickler werden möchten. Der Kurs soll Ihnen einen Vorsprung in die Java-Programmierung verschaffen und Sie sowohl für grundlegende als auch für fortgeschrittene Java-Konzepte sowie für verschiedene Java-Frameworks wie Hibernate & Spring schulen.

Hast du eine Frage an uns? Bitte erwähnen Sie dies im Kommentarbereich dieses Artikels zum „Klonen in Java“. Wir werden uns so schnell wie möglich bei Ihnen melden.