Čo je klonovanie v prostredí Java a jeho typy?



Tento článok o klonovaní v prostredí Java vám poskytne podrobné informácie o procese klonovania a rôznych druhoch klonovania podporovaných programom Java.

Počas programovania sa často stretávame so scenármi, kedy je potrebné znova použiť celý kúsok kódu. Prepísanie kódu spôsobí, že program bude objemný, a to pri súčasnom znížení efektívnosti programu. Java nám teda poskytuje vynikajúcu vlastnosť, ktorá zachraňuje túto ťažkú ​​úlohu. Toto je známe ako klonovanie v Jave a prostredníctvom tohto článku vám poskytnem úplné informácie.

Ďalej uvádzam témy, ktorým sa budem v tomto článku venovať:





Klonovanie v Jave

Klonovanie objektov v prostredí Java je proces vytvárania presnej kópie pôvodného objektu. Inými slovami, ide o spôsob vytvorenia nového objektu kopírovaním všetkých údajov a atribútov z pôvodného objektu. To je možné iba implementáciou metódy clone () metódy java.lang.Object trieda. Metóda klonovania vytvorí presnú kópiu objektu, pre ktorý bolavyvolané v poradí priradenia pole po poli a vráti odkaz na nový objekt . Jedna vec, ktorú si musíte pamätať, je, že v Jave môžu objekty, ktoré implementujú rozhranie klonu, ktoré je rozhraním značiek, používať clone ().

čo znamená menný priestor v c ++

Teraz, keď ste si vedomí toho, čo sa klonuje v prostredí Java, sa pozrime na rôzne výhody používania tejto funkcie.



Výhody klonovania v Jave

Ďalej uvádzam niekoľko najzaujímavejších funkcií používania klonovania v Jave.

  • Pomáha pri zmenšovaní riadkov kódu.
  • Najefektívnejší a najefektívnejší spôsob kopírovaniapredmety.
  • Clone () sa tiež považuje za najrýchlejšiu metódu kopírovania poľa.

Poznámka: Používanie klonovania môže mať za následok určité problémy s dizajnom, ale ak ho použijete správnym strategickým spôsobom, môže vám to prospieť.

Typy klonovania v Jave

Klonovanie v Jave je možné zoskupiťdo dvoch kategórií:



  1. Plytké klonovanie
  2. Hlboké klonovanie

Poďme rozumieť každému z nich jeden po druhom.

Plytké klonovanie

Keď sa v Jave proces klonovania uskutočňuje vyvolaním metódy clone (), nazýva sa to Plytké klonovanie. Je to predvolený klonovací proces v Jave, kde sa vytvorí plytká kópia pôvodného objektu s presným poľom. V prípade, že má pôvodný objekt odkazy na niektoré ďalšie objekty ako polia, budú klonované iba odkazy tohto objektu namiesto vytvorenia nového objektu. Inými slovami, ak zmeníte hodnotu klonovaných objektov, prejaví sa to aj v origináli. Plytké klonovanie teda závisí od pôvodného objektu.

plytká kópia - Klonovanie v Jave - EdurekaĎalej uvádzam príklad toho istého:

balíček edureka trieda EduCourse {Kurz reťazca1 Kurz reťazca2 Kurz reťazca3 verejné EduCourse (reťazec crs1, reťazec crs2, reťazec crs3) {this.course1 = crs1 this.course2 = crs2 this.course3 = crs3}} trieda EduLearner implementuje Cloneable {int eduId String LearnerName EduCourse eduCourse public EduLearner (int eduId, String LearnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = LearnerName this.eduCourse = eduCourse} // Predvolená verzia metódy Clone () chránená metódou Object Clone () vyvolá CloneNotSupportedException {return .clone ()}} verejná trieda ShallowCloneSample {public static void main (String [] args) {EduCourse j2ee = new EduCourse ('Java', 'Spring', 'Microservices') EduLearner learnner1 = new EduLearner (2811, 'Max' , j2ee) EduLearner Learner2 = nulový pokus {// Vytvorenie klonu Learner1 a jeho priradenie k Learner2 Learner2 = (EduLearner) Learner1.clone ()} catch (CloneNotSupportedException e) {e.printStackTrace ()} // Tlač podrobností Learner1 System.out.p rintln ('Details of Learner 2:') System.out.println ('Id:' + learnner1.eduId) System.out.println ('Name:' + learnner1.learnerName) System.out.println ('Id kurzu: '+ Learner1.eduCourse) // Tlač všetkých kurzov' Learner1 'System.out.println (' Courses of Learner 1: ') System.out.println (Learner1.eduCourse.course1) System.out.println (Learner1. eduCourse.course2) System.out.println (learnner1.eduCourse.course3) // Tlač detailov Learner2 System.out.println ('Podrobnosti o Learner 2:') System.out.println ('Id:' + learnner2.eduId ) System.out.println ('Názov:' + learnner2.learnerName) System.out.println ('ID kurzu:' + learnner2.eduCourse) // Tlač všetkých kurzov systému 'learnner2' System.out.println ('Kurzy) of Learner 2: ') System.out.println (learnner2.eduCourse.course1) System.out.println (learnner2.eduCourse.course2) System.out.println (learnner2.eduCourse.course3) // Zmena kurzu3' Learner2 'learnner2.eduCourse.course3 =' JSP '// Táto zmena sa prejaví v pôvodnom' learnner1 'System.out.println (' Aktualizované kurzy Learner 2: ') System.out.println (Learner1.eduCourse.course1) System.out.println (Learner1.eduCourse.course2) System.out.println (Learner1.eduCourse.course3)}}

Výkon:

Podrobnosti o Learner 2: Id: 2811 Názov: Max ID kurzu: EduCourse @ 15db9742 Kurzy Learner 1: Java Spring Microservices Podrobnosti o Learner 2: Id: 2811 Názov: Max ID kurzu: EduCourse @ 15db9742 Kurzy Learner 2: Java Spring Microservices Aktualizované kurzy Learner 2: Java Spring JSP

Hlboké klonovanie v Jave

Keď sa v Jave proces klonovania vykonáva implementáciou klonovateľného rozhrania, nazýva sa to Deep Cloning. Pri tomto type klonovania sa vytvorí presná kópia všetkých polí pôvodného objektu. Ale v prípade, že má pôvodný objekt odkazy na iné objekty ako polia, potom sa kópia týchto objektov vytvorí tiež volaním metódy clone (). Vďaka tomu bude klonovaný objekt nezávislý od pôvodného objektu a všetky zmeny vykonané v ktoromkoľvek z objektov sa na druhom neprejavia.

java kód na ukončenie programu

Ďalej uvádzam príklad toho istého:

balík edureka class EduCourse implementuje Cloneable {String Course1 String Course2 String Course3 public EduCourse (String crs1, String crs2, String crs3) {this.course1 = crs1 this.course2 = crs2 this.course3 = crs3} chránený klon objektu () hodí CloneNotSupportedException návrat super.clone ()}} trieda EduLearner implementuje Cloneable {int eduId String LearnerName EduCourse eduCourse public EduLearner (int eduId, String LearnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = learnnerName this.eduCourse} eduCourse} eduCourse} Prepísanie metódy clone () na vytvorenie hlbokej kópie objektu chráneného objektom clone () vyvolá CloneNotSupportedException {EduLearner Learner = (EduLearner) super.clone () learnner.eduCourse = (EduCourse) eduCourse.clone () návratový študent}} verejnej triedy DeepCloneSample {public static void main (String [] args) {EduCourse j2ee = new EduCourse ('Java', 'Spring', 'Microservices') EduLearner learnner1 = new EduLearner (2811, 'Max', j2ee) EduLearner learn er2 = nulový pokus {// Vytvorenie klonu Learner1 a jeho priradenie k Learner2 Learner2 = (EduLearner) Learner1.clone ()} catch (CloneNotSupportedException e) {e.printStackTrace ()} // Tlač podrobností systému Learner1 System.out. println ('Podrobnosti o študentovi 2:') System.out.println ('Id:' + learnner1.eduId) System.out.println ('Meno:' + learnner1.learnerName) System.out.println ('Id kurzu: '+ Learner1.eduCourse) // Tlač všetkých kurzov' Learner1 'System.out.println (' Courses of Learner 1: ') System.out.println (Learner1.eduCourse.course1) System.out.println (Learner1. eduCourse.course2) System.out.println (learnner1.eduCourse.course3) // Tlač detailov Learner2 System.out.println ('Podrobnosti o Learner 2:') System.out.println ('Id:' + learnner2.eduId ) System.out.println ('Názov:' + learnner2.learnerName) System.out.println ('ID kurzu:' + learnner2.eduCourse) // Tlač všetkých kurzov systému 'learnner2' System.out.println ('Kurzy) of Learner 2: ') System.out.println (learnner2.eduCourse.course1) System.out.printl n (learnner2.eduCourse.course2) System.out.println (learnner2.eduCourse.course3) // Zmena kurzu 3 'learnner2' learnner2.eduCourse.course3 = 'JSP' // Táto zmena sa neprejaví v origináli ' Learner1 'System.out.println (' Courses of Learner 1: ') System.out.println (Learner1.eduCourse.course1) System.out.println (Learner1.eduCourse.course2) System.out.println (Learner1.eduCourse. course3) // Aktualizované kurzy Learner2 System.out.println ('Courses of Learner 2:') System.out.println (Learner2.eduCourse.course1) System.out.println (learnner2.eduCourse.course2) System.out. println (learnner2.eduCourse.course3)}}

Výkon:

Podrobnosti o študentovi 2: Id: 2811 Názov: Max ID kurzu: edureka.EduCourse@15db9742 Kurzy študenta 1: Jarné mikroslužby Java Podrobnosti o študentovi 2: Id: 2811 Názov: Max ID kurzu: edureka.EduCourse@6d06d69c Kurzy študenta 2 : Kurzy učiteľa mikroskopických služieb Java Spring 1: Kurzy učiteľa mikroskopických služieb Java Spring 2: Java Spring JSP

Týmto sa dostávame na koniec tohto článku o klonovaní v Jave. Ak sa chcete dozvedieť viac informácií o prostredí Java, môžete sa obrátiť na našu stránku .

prepojený zoznam v programe c

Teraz, keď ste pochopili, čo je klonovanie v Jave, pozrite sa na autor: Edureka, dôveryhodná online vzdelávacia spoločnosť so sieťou viac ako 250 000 spokojných študentov rozmiestnených po celom svete. Výcvikový a certifikačný kurz Edureka Java J2EE a SOA je určený pre študentov a profesionálov, ktorí chcú byť vývojármi Java. Kurz je navrhnutý tak, aby vám dal náskok v programovaní v Jave a naučil vás základné aj pokročilé koncepty Javy spolu s rôznymi rámcami Java, ako je Hibernate & Spring.

Máte na nás otázku? Uveďte to prosím v sekcii komentárov v tomto článku „Klonovanie v Jave“ a my sa vám ozveme čo najskôr.