Hvad er kloning i Java og dens typer?



Denne artikel om kloning i Java giver dig detaljeret indsigt i kloningsprocessen og de forskellige typer kloning, der understøttes af Java.

Under programmeringen støder vi ofte på scenarier, hvor vi har brug for at genbruge et komplet stykke kode. Omskrivning af koden gør programmet voluminøst, samtidig med at programmets effektivitet mindskes. Således giver Java os en fremragende funktion, som redder er fra denne besværlige opgave. Dette er kendt som kloning i Java og gennem mediet i denne artikel vil jeg give dig komplet indsigt i det.

konvertere dobbelt til int i java

Nedenfor er de emner, jeg vil diskutere i denne artikel:





Kloning i Java

Objektkloning i Java er processen med at oprette en nøjagtig kopi af det originale objekt. Med andre ord er det en måde at oprette et nyt objekt på ved at kopiere alle data og attributter fra det originale objekt. Dette er kun muligt ved at implementere clone () -metoden til java.lang.Objekt klasse. Klonmetoden opretter en nøjagtig kopi af et objekt, som det har væretpåkrævet i en felt-for-felt-tildelingsrækkefølge og returnerer den nye objektreference . En ting, som du skal huske, i Java, er det muligt for objekterne, der implementerer klongrænsefladen, som er en markørgrænseflade, at bruge klonen ().

Nu hvor du er opmærksom på, hvad der kloning i Java, lad os se forskellige fordele ved at bruge denne funktion.



Fordele ved kloning i Java

Nedenfor har jeg listet et par af de mest spændende funktioner ved brug af kloning i Java.

  • Hjælper med at reducere linjerne med kode.
  • Den mest effektive og effektive måde at kopiere pågenstande.
  • Klonen () betragtes også som den hurtigste metode til at kopiere en matrix.

Bemærk: Selvom brug af kloning kan resultere i nogle designproblemer, men hvis du bruger det på en ordentlig strategisk måde, kan det gavne dig.

Typer af kloning i Java

Kloning i Java kan grupperesi to kategorier:



  1. Lav kloning
  2. Dyb kloning

Lad os forstå hver af dem en efter en.

Lav kloning

I Java, når kloningsprocessen udføres ved at påberåbe sig klonemetoden (), kaldes den Shallow Cloning. Det er standardkloningsprocessen i Java, hvor en lav kopi af det originale objekt oprettes med det nøjagtige felt. Hvis det originale objekt har referencer til nogle andre objekter som felter, klones kun referencerne for det objekt i stedet for oprettelse af nyt objekt. Med andre ord, hvis du ændrer værdien af ​​de klonede objekter, vil den også blive afspejlet i originalen. Derfor er lav kloning afhængig af det oprindelige objekt.

lav kopi - Kloning i Java - EdurekaNedenfor har jeg givet eksemplet på det samme:

pakke edureka klasse EduCourse {String kursus1 String kursus2 String kursus3 offentlig EduCourse (String crs1, String crs2, String crs3) {this.course1 = crs1 this.course2 = crs2 this.course3 = crs3}} klasse EduLearner implementerer Cloneable {int eduId String elev EduCourse eduCourse public EduLearner (int eduId, String learnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = learnerName this.eduCourse = eduCourse} // Standardversion af klon () metode beskyttet Objekt klon () kaster super CloneNotSupport .clone ()}} offentlig klasse ShallowCloneSample {public static void main (String [] args) {EduCourse j2ee = new EduCourse ('Java', 'Spring', 'Microservices') EduLearner elev1 = new EduLearner (2811, 'Max' , j2ee) EduLearner learner2 = null prøve {// Oprettelse af en klon af elev1 og tildeling af den til elev2 learner2 = (EduLearner) learner1.clone ()} fangst (CloneNotSupportedException e) {e.printStackTrace ()} // Udskrivningsoplysninger om elev1 System.out.p rintln ('Detaljer om elev 2:') System.out.println ('Id:' + elev1.eduId) System.out.println ('Navn:' + elev1.learnerName) System.out.println ('Kursus-id: '+ elev1.eduCourse) // Udskrivning af alle 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 (elev1.eduCourse.course3) // Udskrivningsoplysninger om Learner2 System.out.println ('Detaljer om elev 2:') System.out.println ('Id:' + learner2.eduId ) System.out.println ('Name:' + learner2.learnerName) System.out.println ('Course Id:' + learner2.eduCourse) // Udskrivning af alle kurser i 'learner2' System.out.println ('Courses af elev 2: ') System.out.println (learner2.eduCourse.course1) System.out.println (learner2.eduCourse.course2) System.out.println (learner2.eduCourse.course3) // Ændring af kurset3 for' elev2 'learner2.eduCourse.course3 =' JSP '// Denne ændring afspejles i den originale' learner1 'System.out.println (' Opdaterede kurser for elev 2: ') System.out.println (learner1.eduCourse.course1) System.out.println (elev1.eduCourse.course2) System.out.println (elev1.eduCourse.course3)}}

Produktion:

Detaljer om elev 2: Id: 2811 Navn: Max kursus-id: EduCourse @ 15db9742 Kurser for elev 1: Java Spring Microservices Detaljer om elev 2: Id: 2811 Navn: Max kursus-id: EduCourse @ 15db9742 Kurser for elev 2: Java Spring Microservices Opdaterede kurser for elev 2: Java Spring JSP

Dyb kloning i Java

Når Java klones ved at implementere Cloneable-interface, kaldes det i Java Deep Cloning. I denne type kloning oprettes en nøjagtig kopi af alle felterne i det originale objekt. Men hvis det oprindelige objekt har referencer til andre objekter som felter, oprettes der også en kopi af disse objekter ved at kalde metoden clone (). Dette gør det klonede objekt uafhængigt af det originale objekt, og eventuelle ændringer, der foretages i et af objektet, reflekteres ikke på det andet.

Nedenfor har jeg givet eksemplet på det samme:

pakke edureka klasse EduCourse implementerer Cloneable {Strengkurs1 Stringkurs2 Stringkursus3 offentlig EduCourse (String crs1, String crs2, String crs3) {this.course1 = crs1 this.course2 = crs2 this.course3 = crs3} beskyttet Objektklon () smider CloneNceptionSupport returner super.clone ()}} klasse EduLearner implementerer Cloneable {int eduId String learnerName EduCourse eduCourse public EduLearner (int eduId, String learnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = learnerName this.eduCourse}. eduCourse Tilsidesættelse af klon () -metode til oprettelse af en dyb kopi af et objektbeskyttet Objektklon () kaster CloneNotSupportedException {EduLearner elev = (EduLearner) super.clone () learner.eduCourse = (EduCourse) eduCourse.clone () returner elev}} offentlig klasse DeepCloneSample {public static void main (String [] args) {EduCourse j2ee = new EduCourse ('Java', 'Spring', 'Microservices') EduLearner elev1 = new EduLearner (2811, 'Max', j2ee) EduLearner lærer er2 = null prøv {// Oprettelse af en klon af elev1 og tildeling til elev2 lærer2 = (EduLearner) elev1.clone ()} fangst (CloneNotSupportedException e) {e.printStackTrace ()} // Udskrivningsoplysninger om Learner1 System.out. println ('Detaljer om elev 2:') System.out.println ('Id:' + elev1.eduId) System.out.println ('Navn:' + elev1.learnerName) System.out.println ('Kursus-id: '+ elev1.eduCourse) // Udskrivning af alle 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 (elev1.eduCourse.course3) // Udskrivningsoplysninger om Learner2 System.out.println ('Detaljer om elev 2:') System.out.println ('Id:' + learner2.eduId ) System.out.println ('Name:' + learner2.learnerName) System.out.println ('Course Id:' + learner2.eduCourse) // Udskrivning af alle kurser i 'learner2' System.out.println ('Courses af elev 2: ') System.out.println (learner2.eduCourse.course1) System.out.printl n (learner2.eduCourse.course2) System.out.println (learner2.eduCourse.course3) // Ændring af kurset3 for 'learner2' elev2.eduCourse.course3 = 'JSP' // Denne ændring afspejles ikke i originalen ' 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. kursus3) // Opdaterede kurser for 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 om elev 2: Id: 2811 Navn: Max kursus-id: edureka.EduCourse@15db9742 Kurser for elev 1: Java Spring Microservices Detaljer om elev 2: Id: 2811 Navn: Max kursus-id: edureka.EduCourse@6d06d69c Kurser for elev 2 : Java Spring Microservices Course of Learner 1: Java Spring Microservices Courses of Learner 2: Java Spring JSP

Dette bringer os til slutningen af ​​denne artikel om kloning i Java. Hvis du vil vide mere om Java, kan du henvise til vores .

Nu hvor du har forstået, hvad der er en kloning i Java, skal du tjekke af Edureka, et pålideligt online læringsfirma med et netværk på mere end 250.000 tilfredse elever spredt over hele kloden. Edurekas Java J2EE- og SOA-uddannelses- og certificeringskursus er designet til studerende og fagfolk, der ønsker at være Java-udvikler. Kurset er designet til at give dig et forspring i Java-programmering og træne dig til både kerne- og avancerede Java-koncepter sammen med forskellige Java-rammer som Hibernate & Spring.

Har du et spørgsmål til os? Nævn det i kommentarfeltet i denne “Kloning i Java” -artikel, og vi vender tilbage til dig hurtigst muligt.