Der Klonen von Objekten ist eine Möglichkeit, eine exakte Kopie eines Objekts zu erstellen. Die clone()-Methode der Object-Klasse wird zum Klonen eines Objekts verwendet.
Der java.lang.Cloneable-Schnittstelle muss von der Klasse implementiert werden, deren Objektklon wir erstellen möchten. Wenn wir die klonbare Schnittstelle nicht implementieren, wird die Methode clone() generiert CloneNotSupportedException .
deterministische endliche Automaten
Der clone()-Methode ist in der Object-Klasse definiert. Die Syntax der clone()-Methode lautet wie folgt:
protected Object clone() throws CloneNotSupportedException
Warum die Methode clone() verwenden?
Der clone()-Methode erspart den zusätzlichen Verarbeitungsaufwand für die Erstellung der exakten Kopie eines Objekts. Wenn wir es mit dem Schlüsselwort new ausführen, nimmt die Ausführung viel Verarbeitungszeit in Anspruch. Aus diesem Grund verwenden wir das Klonen von Objekten.
Frühlingsmaschen
Vorteil des Objektklonens
Obwohl Object.clone() einige Designprobleme aufweist, ist es dennoch eine beliebte und einfache Methode zum Kopieren von Objekten. Im Folgenden finden Sie eine Liste der Vorteile der Verwendung der clone()-Methode:
- Sie müssen keine langen und sich wiederholenden Codes schreiben. Verwenden Sie einfach eine abstrakte Klasse mit einer 4 oder 5 Zeilen langen clone()-Methode.
- Dies ist die einfachste und effizienteste Methode zum Kopieren von Objekten, insbesondere wenn wir sie auf ein bereits entwickeltes oder altes Projekt anwenden. Definieren Sie einfach eine übergeordnete Klasse, implementieren Sie Cloneable darin, geben Sie die Definition der clone()-Methode an und schon ist die Aufgabe erledigt.
- Clone() ist der schnellste Weg, ein Array zu kopieren.
Nachteil des Objektklonens
Im Folgenden finden Sie eine Liste einiger Nachteile der clone()-Methode:
- Um die Object.clone()-Methode zu verwenden, müssen wir viele Syntaxen an unserem Code ändern, wie z. B. die Implementierung einer klonbaren Schnittstelle, die Definition der clone()-Methode und die Behandlung von CloneNotSupportedException und schließlich den Aufruf von Object.clone() usw.
- Wir müssen eine klonbare Schnittstelle implementieren, solange sie keine Methoden enthält. Wir müssen es nur verwenden, um der JVM mitzuteilen, dass wir clone() für unser Objekt ausführen können.
- Object.clone() ist geschützt, daher müssen wir unseren eigenen clone() bereitstellen und von dort aus indirekt Object.clone() aufrufen.
- Object.clone() ruft keinen Konstruktor auf, daher haben wir keine Kontrolle über die Objektkonstruktion.
- Wenn Sie eine Klonmethode in einer untergeordneten Klasse schreiben möchten, sollten alle ihre Oberklassen die clone()-Methode darin definieren oder sie von einer anderen übergeordneten Klasse erben. Andernfalls schlägt die super.clone()-Kette fehl.
- Object.clone() unterstützt nur flaches Kopieren, aber wir müssen es überschreiben, wenn wir tiefes Klonen benötigen.
Beispiel für die clone()-Methode (Klonen von Objekten)
Sehen wir uns das einfache Beispiel des Objektklonens an
Zentrieren von Bildern in CSS
class Student18 implements Cloneable{ int rollno; String name; Student18(int rollno,String name){ this.rollno=rollno; this.name=name; } public Object clone()throws CloneNotSupportedException{ return super.clone(); } public static void main(String args[]){ try{ Student18 s1=new Student18(101,'amit'); Student18 s2=(Student18)s1.clone(); System.out.println(s1.rollno+' '+s1.name); System.out.println(s2.rollno+' '+s2.name); }catch(CloneNotSupportedException c){} } }Testen Sie es jetzt
Output:101 amit 101 amitLaden Sie das Beispiel für das Klonen von Objekten herunter
Wie Sie im obigen Beispiel sehen können, haben beide Referenzvariablen den gleichen Wert. Somit kopiert clone() die Werte eines Objekts auf ein anderes. Wir müssen also keinen expliziten Code schreiben, um den Wert eines Objekts auf ein anderes zu kopieren.
Wenn wir mit dem Schlüsselwort „new“ ein anderes Objekt erstellen und diesem die Werte eines anderen Objekts zuweisen, ist für dieses Objekt ein hoher Verarbeitungsaufwand erforderlich. Um die zusätzliche Verarbeitungsaufgabe zu sparen, verwenden wir die Methode clone().