Što je kloniranje u Javi i njegove vrste?



Ovaj članak o kloniranju u Javi pružit će vam detaljan uvid u postupak kloniranja i razne vrste kloniranja koje Java podržava.

Tijekom programiranja često nailazimo na scenarije u kojima trebamo ponovno upotrijebiti kompletan dio koda. Prepisivanje koda čini program glomaznim, a istovremeno smanjuje učinkovitost programa. Dakle, Java nam pruža izvrsnu značajku koja spašava ovaj težak zadatak. Ovo je poznato kao Kloniranje u Javi, a kroz članak ovog članka dat ću vam cjelovit uvid u njega.

Ispod su teme o kojima ću raspravljati u ovom članku:





Kloniranje u Javi

Kloniranje objekata u Javi postupak je stvaranja točne kopije izvornog objekta. Drugim riječima, to je način stvaranja novog objekta kopiranjem svih podataka i atributa iz izvornog objekta. To je moguće samo primjenom metode clone () metode java.lang.Object razred. Klonska metoda stvara točnu kopiju objekta za koji je i bilapoziva se u redoslijedu dodjele polja po polje i vratit će novu referencu objekta . Jedne stvari kojih se morate sjetiti, u Javi, objektima koji implementiraju sučelje klona, ​​a to je sučelje markera, dopušteno je koristiti klon ().

Sad kad ste svjesni što se klonira u Javi, uvidimo razne prednosti korištenja ove značajke.



Prednosti kloniranja u Javi

U nastavku sam naveo nekoliko najzanimljivijih značajki korištenja kloniranja u Javi.

  • Pomaže u smanjenju reda koda.
  • Najučinkovitiji i najučinkovitiji način kopiranjapredmeta.
  • Također, klon () se smatra najbržom metodom za kopiranje niza.

Napomena: Iako bi korištenje kloniranja moglo dovesti do nekih problema s dizajnom, ali ako ga koristite na odgovarajući strateški način, može vam koristiti.

Vrste kloniranja u Javi

Kloniranje u Javi može se grupiratiu dvije kategorije:



  1. Plitko kloniranje
  2. Duboko kloniranje

Razumijemo svakog od njih jedan po jedan.

kako instalirati hadoop na linux

Plitko kloniranje

U Javi, kada se postupak kloniranja vrši pozivanjem metode clone (), naziva se Plitko kloniranje. To je zadani postupak kloniranja u Javi gdje će se stvoriti plitka kopija izvornog objekta s točnim poljem. U slučaju da izvorni objekt kao polja sadrži reference na neke druge objekte, tada će se klonirati samo reference tog objekta umjesto stvaranja novog objekta. Drugim riječima, ako promijenite vrijednost kloniranih objekata, to će se odraziti i na izvorniku. Dakle, plitko kloniranje ovisi o izvornom objektu.

plitka kopija - Kloniranje u Javi - EdurekaIspod sam naveo primjer istog:

paket edureka klasa EduCourse {String course1 String course2 String course3 public EduCourse (String crs1, String crs2, String crs3) {this.course1 = crs1 this.course2 = crs2 this.course3 = crs3}} class EduLearner implementira Cloneable {int eduId String LearnerName EduCourse eduCourse javni EduLearner (int eduId, String LearnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = LearnerName this.eduCourse = eduCourse} // Zadana verzija clone () metoda zaštićena Object clone () baca CloneNotSupportedException {return super .clone ()}} javna klasa ShallowCloneSample {public static void main (String [] args) {EduCourse j2ee = new EduCourse ('Java', 'Spring', 'Microservices') EduLearner učenik1 = novi EduLearner (2811, 'Max' , j2ee) EduLearner učenik2 = null try {// Stvaranje klona učenika1 i njegovo dodjeljivanje učeniku2 učenik2 = (EduLearner) Learner1.clone ()} catch (CloneNotSupportedException e) {e.printStackTrace ()} // Pojedinosti ispisa Learner1 System.out.p rintln ('Pojedinosti o učeniku 2:') System.out.println ('Id:' + Learner1.eduId) System.out.println ('Ime:' + Learner1.learnerName) System.out.println ('Id predmeta: '+ Learner1.eduCourse) // Ispis svih tečajeva sustava' Learner1 'System.out.println (' Tečajevi učenika 1: ') System.out.println (Learner1.eduCourse.course1) System.out.println (učenik1. eduCourse.course2) System.out.println (Learner1.eduCourse.course3) // Ispis pojedinosti Learner2 System.out.println ('Detalji o učeniku 2:') System.out.println ('Id:' + Learner2.eduId ) System.out.println ('Ime:' + Learner2.learnerName) System.out.println ('Id tečaja:' + Learner2.eduCourse) // Ispis svih tečajeva 'Learner2' System.out.println ('Tečajevi učenika 2: ') System.out.println (Learner2.eduCourse.course1) System.out.println (Learner2.eduCourse.course2) System.out.println (Learner2.eduCourse.course3) // Mijenjanje kursa3' Learner2 'Learner2.eduCourse.course3 =' JSP '// Ova će se promjena odraziti na izvornom' Learner1 'System.out.println (' Ažurirani tečajevi učenika 2: ') System.out.println (Learner1.eduCourse.course1) System.out.println (Learner1.eduCourse.course2) System.out.println (Learner1.eduCourse.course3)}}

Izlaz:

Pojedinosti o učeniku 2: Id: 2811 Ime: Max ID predmeta: EduCourse @ 15db9742 Tečajevi učenika 1: Java Spring Microservices Pojedinosti o učeniku 2: Id: 2811 Naziv: Max ID predmeta: EduCourse @ 15db9742 Tečajevi učenika 2: Java Spring Microservices Ažurirani tečajevi učenika 2: Java Spring JSP

Duboko kloniranje u Javi

U Javi se kada se postupak kloniranja provodi implementiranjem Cloneable sučelja naziva dubokim kloniranjem. Kod ove vrste kloniranja stvorit će se točna kopija svih polja izvornog objekta. Ali u slučaju da izvorni objekt ima reference na druge objekte kao polja, tada će se stvoriti i kopija tih objekata pozivanjem metode clone (). To klonirani objekt čini neovisnim od izvornog objekta, a sve promjene izvršene u bilo kojem od objekata neće se odraziti na drugom.

rekurzija fibonacci c ++

Ispod sam naveo primjer istog:

paket edureka klasa EduCourse implementira Cloneable {String course1 String course2 String course3 public EduCourse (String crs1, String crs2, String crs3) {this.course1 = crs1 this.course2 = crs2 this.course3 = crs3} zaštićeni klon objekta () baca CloneNotSupportedException return super.clone ()}} klasa EduLearner implementira Cloneable {int eduId String LearnerName EduCourse eduCourse public EduLearner (int eduId, String LearnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = LearnerName this.eduCourse = eduCourse} // Nadjačavanje metode clone () za stvaranje dubinske kopije objektno zaštićenog objekta clone () baca CloneNotSupportedException {EduLearner učenik = (EduLearner) super.clone () Learner.eduCourse = (EduCourse) eduCourse.clone () return učenik}} javna klasa DeepCloneSample {public static void main (String [] args) {EduCourse j2ee = new EduCourse ('Java', 'Spring', 'Microservices') EduLearner učenik1 = novi EduLearner (2811, 'Max', j2ee) EduLearner learn er2 = null try {// Stvaranje klona učenika1 i njegovo dodjeljivanje učeniku2 učenik2 = (EduLearner) Learner1.clone ()} catch (CloneNotSupportedException e) {e.printStackTrace ()} // Ispis pojedinosti sustava Learner1 System.out. println ('Detalji o učeniku 2:') System.out.println ('Id:' + Learner1.eduId) System.out.println ('Ime:' + Learner1.learnerName) System.out.println ('Id predmeta: '+ Learner1.eduCourse) // Ispis svih tečajeva sustava' Learner1 'System.out.println (' Tečajevi učenika 1: ') System.out.println (Learner1.eduCourse.course1) System.out.println (učenik1. eduCourse.course2) System.out.println (Learner1.eduCourse.course3) // Ispis pojedinosti Learner2 System.out.println ('Detalji o učeniku 2:') System.out.println ('Id:' + Learner2.eduId ) System.out.println ('Ime:' + Learner2.learnerName) System.out.println ('Id tečaja:' + Learner2.eduCourse) // Ispis svih tečajeva 'Learner2' System.out.println ('Tečajevi učenika 2: ') System.out.println (Learner2.eduCourse.course1) System.out.printl n (Learner2.eduCourse.course2) System.out.println (Learner2.eduCourse.course3) // Mijenjanje tečaja3 'Learner2' Learner2.eduCourse.course3 = 'JSP' // Ova promjena neće biti odražena u izvorniku ' student1 'System.out.println (' Tečajevi učenika 1: ') System.out.println (Learner1.eduCourse.course1) System.out.println (Learner1.eduCourse.course2) System.out.println (Learner1.eduCourse. course3) // Ažurirani tečajevi učenika2 System.out.println ('Tečajevi učenika 2:') System.out.println (Learner2.eduCourse.course1) System.out.println (Learner2.eduCourse.course2) System.out. println (student.eduCourse.course3)}}

Izlaz:

Pojedinosti o učeniku 2: Id: 2811 Ime: Max Id predmeta: edureka.EduCourse@15db9742 Tečajevi učenika 1: Java Spring Microservices Pojedinosti o učeniku 2: Id: 2811 Naziv: Max ID predmeta: edureka.EduCourse@6d06d69c Tečajevi učenika 2 : Java Spring Microservices Tečajevi učenika 1: Java Spring Microservices Tečajevi učenika 2: Java Spring JSP

Ovo nas dovodi do kraja ovog članka o Kloniranju u Javi. Ako želite znati više o Javi, možete se obratiti našoj .

Sad kad ste shvatili što je kloniranje u Javi, pogledajte Edureka, pouzdana tvrtka za internetsko učenje s mrežom od više od 250 000 zadovoljnih učenika raširenih širom svijeta. Edurekin tečaj za obuku i certificiranje Java J2EE i SOA namijenjen je studentima i profesionalcima koji žele biti programer Java. Tečaj je dizajniran da vam pruži početnu prednost u Java programiranju i osposobi vas za osnovne i napredne Java koncepte zajedno s raznim Java okvirima poput Hibernate & Spring.

Imate pitanje za nas? Molimo vas da ga spominjete u odjeljku za komentare ovog članka 'Kloniranje u Javi' i javit ćemo vam se što je prije moguće.