Vad är kloning i Java och dess typer?



Den här artikeln om kloning i Java ger dig detaljerad inblick i kloningsprocessen och de olika typer av kloning som stöds av Java.

Under programmeringen stöter vi ofta på scenarier där vi behöver återanvända en komplett kod. Om koden skrivs om blir programmet skrymmande, samtidigt som det minskar programmets effektivitet. Således ger Java oss en utmärkt funktion som räddar är från denna betungande uppgift. Detta kallas kloning i Java och genom denna artikel kommer jag att ge dig fullständig insikt i det.

Nedan följer de ämnen jag kommer att diskutera i den här artikeln:





vad innehåller den__

Kloning i Java

Objektkloning i Java är processen att skapa en exakt kopia av det ursprungliga objektet. Med andra ord är det ett sätt att skapa ett nytt objekt genom att kopiera all data och attribut från det ursprungliga objektet. Detta är endast möjligt genom att implementera clone () -metoden för java.lang.Object klass. Klonmetoden skapar en exakt kopia av ett objekt som det har varit föranropas i en fält-för-fält-tilldelningsordning och returnerar den nya objektreferensen . En sak som du måste komma ihåg, i Java, får objekten som implementerar klongränssnittet som är ett markörgränssnitt använda klonen ().

Nu när du är medveten om vad som klonar i Java kan vi se olika fördelar med att använda den här funktionen.



Fördelar med kloning i Java

Nedan har jag listat några av de mest spännande funktionerna för att använda kloning i Java.

  • Hjälper till att minska kodraderna.
  • Det mest effektiva och effektiva sättet att kopieraobjekt.
  • Klonen () anses också vara den snabbaste metoden för att kopiera en matris.

Obs: Även om användning av kloning kan leda till vissa designproblem, men om du använder det på ett korrekt strategiskt sätt kan det gynna dig.

Typer av kloning i Java

Kloning i Java kan grupperasi två kategorier:



  1. Grunt kloning
  2. Djup kloning

Låt oss förstå var och en av dem en efter en.

Grunt kloning

I Java, när kloningsprocessen görs genom att anropa clone () -metoden, kallas den Shallow Cloning. Det är standardkloningsprocessen i Java där en grund kopia av originalobjektet skapas med exakt fält. Om det ursprungliga objektet har hänvisningar till vissa andra objekt som fält, kommer endast referenser för det objektet att klonas istället för att skapa ett nytt objekt. Med andra ord, om du ändrar värdet på de klonade objekten kommer det också att återspeglas i originalet. Grundlig kloning är således beroende av det ursprungliga objektet.

grunt exemplar - Kloning i Java - EdurekaNedan har jag gett exemplet på samma:

paket edureka klass EduCourse {Strängkurs1 Strängkurs2 Strängkurs3 allmän EduCourse (String crs1, String crs2, String crs3) {this.course1 = crs1 this.course2 = crs2 this.course3 = crs3}} klass EduLearner implementerar Cloneable {int eduId String EduCourse eduCourse public EduLearner (int eduId, String learnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = learnerName this.eduCourse = eduCourse} // Standardversion av klon () metod skyddad Objektklon () kastar superklonet .clone ()}} public class ShallowCloneSample {public static void main (String [] args) {EduCourse j2ee = new EduCourse ('Java', 'Spring', 'Microservices') EduLearner elev1 = new EduLearner (2811, 'Max' , j2ee) EduLearner learner2 = null try {// Skapa en klon av elev1 och tilldela den till elev2 learner2 = (EduLearner) learner1.clone ()} fångst (CloneNotSupportedException e) {e.printStackTrace ()} // Utskriftsinformation för elev1 System.out.p rintln ('Detaljer för elev 2:') System.out.println ('Id:' + elev1.eduId) System.out.println ('Namn:' + elev1.learnerName) System.out.println ('Course Id: '+ learner1.eduCourse) // Skriva ut alla kurser i' learner1 'System.out.println (' Courses of Learner 1: ') System.out.println (learner1.eduCourse.course1) System.out.println (elev1. eduCourse.course2) System.out.println (learner1.eduCourse.course3) // Utskriftsinformation för Learner2 System.out.println ('Detaljer för elev 2:') System.out.println ('Id:' + learner2.eduId ) System.out.println ('Name:' + learner2.learnerName) System.out.println ('Course Id:' + learner2.eduCourse) // Skriva ut alla kurser i 'learner2' System.out.println ('Courses av elev 2: ') System.out.println (learner2.eduCourse.course1) System.out.println (learner2.eduCourse.course2) System.out.println (learner2.eduCourse.course3) // Ändra kursen 3 för' elev2 'learner2.eduCourse.course3 =' JSP '// Denna ändring kommer att återspeglas i originalet' learner1 'System.out.println (' Uppdaterade kurser för elev 2: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1.eduCourse.course2) System.out.println (learner1.eduCourse.course3)}}

Produktion:

Detaljer för elev 2: Id: 2811 Namn: Max kurs Id: EduCourse @ 15db9742 Kurser för elev 1: Java Spring Microservices Detaljer för elev 2: Id: 2811 Namn: Max kurs Id: EduCourse @ 15db9742 Kurser för elev 2: Java Spring Microservices Uppdaterade kurser för elev 2: Java Spring JSP

Djup kloning i Java

I Java, när kloningsprocessen görs genom att implementera det klonbara gränssnittet kallas det Deep Cloning. I denna typ av kloning skapas en exakt kopia av alla fält i originalobjektet. Men om det ursprungliga objektet har referenser till andra objekt som fält kommer en kopia av dessa objekt också att skapas genom att anropa klonmetoden (). Detta gör det klonade objektet oberoende av det ursprungliga objektet och alla ändringar som görs i något av objektet kommer inte att återspeglas på det andra.

casting dubbel till int java

Nedan har jag gett exemplet på samma:

paket edureka klass EduCourse implementerar Cloneable {Stringkurs1 Stringkurs2 Stringkurs3 offentlig EduCourse (String crs1, String crs2, String crs3) {this.course1 = crs1 this.course2 = crs2 this.course3 = crs3} skyddad objektklon () kastar CloneNceptionSupport returnera super.clone ()}} klass EduLearner implementerar Cloneable {int eduId String learnerName EduCourse eduCourse public EduLearner (int eduId, String learnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = learnerName this.eduour Åsidosättande klon () -metod för att skapa en djup kopia av ett objektskyddat Objektklon () kastar CloneNotSupportedException {EduLearner elev = (EduLearner) super.clone () learner.eduCourse = (EduCourse) eduCourse.clone () returner elev}} allmän klass DeepCloneSample {public static void main (String [] args) {EduCourse j2ee = new EduCourse ('Java', 'Spring', 'Microservices') EduLearner elev1 = new EduLearner (2811, 'Max', j2ee) EduLearner lär sig er2 = null försök {// Skapa en klon av elev1 och tilldela den till elev2. elev2 = (EduLearner) elev1.klon ()} fångst (CloneNotSupportedException e) {e.printStackTrace ()} // Utskriftsinformation för Learner1 System.out. println ('Detaljer för elev 2:') System.out.println ('Id:' + learner1.eduId) System.out.println ('Name:' + learner1.learnerName) System.out.println ('Course Id: '+ learner1.eduCourse) // Skriva ut alla kurser i' learner1 'System.out.println (' Courses of Learner 1: ') System.out.println (learner1.eduCourse.course1) System.out.println (elev1. eduCourse.course2) System.out.println (learner1.eduCourse.course3) // Utskriftsinformation för Learner2 System.out.println ('Detaljer för elev 2:') System.out.println ('Id:' + learner2.eduId ) System.out.println ('Name:' + learner2.learnerName) System.out.println ('Course Id:' + learner2.eduCourse) // Skriva ut alla kurser i 'learner2' System.out.println ('Courses av elev 2: ') System.out.println (learner2.eduCourse.course1) System.out.printl n (learner2.eduCourse.course2) System.out.println (learner2.eduCourse.course3) // Ändring av kursen 3 för 'learner2' elev2.eduCourse.course3 = 'JSP' // Denna ändring återspeglas inte i originalet elev1 'System.out.println (' Courses of Learner 1: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1.eduCourse.course2) System.out.println (elev1.eduCourse. kurs3) // Uppdaterade kurser för elev2 System.out.println ('Courses of Learner 2:') System.out.println (learner2.eduCourse.course1) System.out.println (learner2.eduCourse.course2) System.out. println (learner2.eduCourse.course3)}}

Produktion:

Detaljer för elev 2: Id: 2811 Namn: Max kurs Id: edureka.EduCourse@15db9742 Kurser för elev 1: Java Spring Microservices Detaljer för elev 2: Id: 2811 Namn: Max kurs Id: edureka.EduCourse@6d06d69c Kurser för elev 2 : Java Spring Microservices Courses of Learner 1: Java Spring Microservices Courses of Learner 2: Java Spring JSP

Detta leder oss till slutet av den här artikeln om kloning i Java. Om du vill veta mer om Java kan du hänvisa till vår .

Nu när du har förstått vad som är en kloning i Java, kolla in av Edureka, ett pålitligt online-lärande företag med ett nätverk av mer än 250 000 nöjda elever spridda över hela världen. Edurekas Java J2EE- och SOA-utbildning och certifieringskurs är utformad för studenter och yrkesverksamma som vill bli Java-utvecklare. Kursen är utformad för att ge dig ett försprång till Java-programmering och träna dig för både kärn- och avancerade Java-koncept tillsammans med olika Java-ramverk som Hibernate & Spring.

Har du en fråga till oss? Vänligen nämna det i kommentarsektionen i den här artikeln 'Kloning i Java' så återkommer vi till dig så snart som möjligt.