Co je klonování v Javě a její typy?



Tento článek o Klonování v Javě vám poskytne podrobné informace o procesu klonování a různých typech klonování podporovaných Javou.

Během programování se často setkáváme se scénáři, kdy musíme znovu použít kompletní část kódu. Díky přepsání kódu je program objemný, a to při současném snížení účinnosti programu. Java nám tedy poskytuje vynikající funkci, která zachraňuje tento obtížný úkol. Toto je známé jako Klonování v Javě a prostřednictvím tohoto článku vám poskytnu úplný přehled.

Níže uvádíme témata, kterým se budu v tomto článku věnovat:





Klonování v Javě

Klonování objektů v Javě je proces vytváření přesné kopie původního objektu. Jinými slovy, jedná se o způsob vytvoření nového objektu zkopírováním všech dat a atributů z původního objektu. To je možné pouze implementací metody clone () metody java.lang.Object třída. Metoda clone vytvoří přesnou kopii objektu, pro který bylavyvolána v pořadí přiřazení pole po poli a vrátí odkaz na nový objekt . Jedna věc, kterou si musíte pamatovat, je, že v Javě mohou objekty, které implementují rozhraní klonu, což je rozhraní značek, používat clone ().

co je datová struktura v Javě

Nyní, když víte, co se klonuje v Javě, pojďme se podívat na různé výhody používání této funkce.



Výhody klonování v Javě

Níže jsem uvedl několik nejzajímavějších funkcí používání klonování v Javě.

  • Pomáhá snižovat řádky kódu.
  • Nejúčinnější a nejefektivnější způsob kopírovánípředměty.
  • Clone () je také považován za nejrychlejší způsob kopírování pole.

Poznámka: Použití klonování může vést k určitým problémům s designem, ale pokud jej použijete správným strategickým způsobem, může vám to prospět.

Druhy klonování v Javě

Klonování v Javě lze seskupitdo dvou kategorií:



  1. Mělké klonování
  2. Hluboké klonování

Rozumíme každému z nich jeden po druhém.

Mělké klonování

Když se v Javě proces klonování provádí vyvoláním metody clone (), nazývá se to Mělké klonování. Jedná se o výchozí proces klonování v Javě, kde bude vytvořena mělká kopie původního objektu s přesným polem. V případě, že původní objekt má odkazy na některé další objekty jako pole, budou místo vytvoření nového objektu klonovány pouze odkazy na tento objekt. Jinými slovy, pokud změníte hodnotu klonovaných objektů, projeví se to také v originále. Mělké klonování tedy závisí na původním objektu.

mělká kopie - Klonování v Javě - EdurekaNíže jsem uvedl stejný příklad:

balíček edureka třída EduCourse {String Course1 String Course2 String Course3 public EduCourse (String crs1, String crs2, String crs3) {this.course1 = crs1 this.course2 = crs2 this.course3 = crs3}} třída EduLearner implementuje Cloneable {int eduId String studnerName EduCourse eduCourse public EduLearner (int eduId, String LearnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = LearnerName this.eduCourse = eduCourse} // Výchozí verze metody Clone () chráněná metodou Object Clone () vyvolá CloneNotSupportedException {return .clone ()}} veřejná třída 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 {// Vytvoření klonu Learner1 a jeho přiřazení k Learner2 Learner2 = (EduLearner) Learner1.clone ()} Catch (CloneNotSupportedException e) {e.printStackTrace ()} // Tisk 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) // Tisk všech kurzů' 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) // Tisk podrobností o Learner2 System.out.println ('Podrobnosti o Learner 2:') System.out.println ('Id:' + learnner2.eduId ) System.out.println ('Název:' + learnner2.learnerName) System.out.println ('Id kurzu:' + learnner2.eduCourse) // Tisk všech kurzů systému 'learnner2' System.out.println ('Kurzy of Learner 2: ') System.out.println (Learner2.eduCourse.course1) System.out.println (Learner2.eduCourse.course2) System.out.println (Learner2.eduCourse.course3) // Změna kurzu3' Learner2 'learnner2.eduCourse.course3 =' JSP '// Tato změna se projeví v původním' learnner1 'System.out.println (' Aktualizované kurzy kurzu 2: ') System.out.println (Learner1.eduCourse.course1) System.out.println (Learner1.eduCourse.course2) System.out.println (Learner1.eduCourse.course3)}}

Výstup:

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

Hluboké klonování v Javě

Když se v Javě provádí proces klonování implementací rozhraní Cloneable, nazývá se to Deep Cloning. V tomto typu klonování bude vytvořena přesná kopie všech polí původního objektu. Ale v případě, že původní objekt má odkazy na jiné objekty jako pole, pak se kopie těchto objektů vytvoří také voláním metody clone (). Díky tomu je klonovaný objekt nezávislý na původním objektu a jakékoli změny provedené v kterémkoli z objektů se na druhém neprojeví.

jak používat trim v Javě

Níže jsem uvedl stejný příklad:

balíček edureka třída 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áněný klon objektu () hodí CloneNotSupportedException návrat super.clone ()}} třída EduLearner implementuje Cloneable {int eduId Řetězec studující_jméno EduCourse eduCourse public EduLearner (int eduId, Řetězec studující_jméno, EduCourse eduCourse) {this.eduId = eduId this.learnerName = learnerName this.eduCourse} eduCourse} Metoda přepsání clone () pro vytvoření hluboké kopie objektu chráněného objektem clone () hodí CloneNotSupportedException {EduLearner Learner = (EduLearner) super.clone () learnner.eduCourse = (EduCourse) eduCourse.clone () návratový student)} veřejná třída 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 {// Vytvoření klonu Learner1 a jeho přiřazení k Learner2 Learner2 = (EduLearner) Learner1.clone ()} catch (CloneNotSupportedException e) {e.printStackTrace ()} // Tisk podrobností systému Learner1 System.out. println ('Details of Learner 2:') System.out.println ('Id:' + learnner1.eduId) System.out.println ('Name:' + learnner1.learnerName) System.out.println ('Id kurzu: '+ Learner1.eduCourse) // Tisk všech kurzů' 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) // Tisk podrobností o Learner2 System.out.println ('Podrobnosti o Learner 2:') System.out.println ('Id:' + learnner2.eduId ) System.out.println ('Název:' + learnner2.learnerName) System.out.println ('Id kurzu:' + learnner2.eduCourse) // Tisk všech kurzů systému 'learnner2' System.out.println ('Kurzy of Learner 2: ') System.out.println (Learner2.eduCourse.course1) System.out.printl n (Learner2.eduCourse.course2) System.out.println (Learner2.eduCourse.course3) // Změna kurzu3 'Learner2' Learner2.eduCourse.course3 = 'JSP' // Tato změna se neprojeví v originále ' 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 studenta2 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ýstup:

Podrobnosti o Learner 2: Id: 2811 Název: Max ID kurzu: edureka.EduCourse@15db9742 Kurzy Learner 1: Java Spring Microservices Podrobnosti o Learner 2: Id: 2811 Název: Max ID kurzu: edureka.EduCourse@6d06d69c Kurzy Learner 2 : Java Spring Microservices Courses of Learner 1: Java Spring Microservices Courses of Learner 2: Java Spring Microservices Courses of Learner 1: Java Spring Microservices Courses of Learner 2: Java Spring JSP

Tím se dostáváme na konec tohoto článku o Klonování v Javě. Pokud se chcete o Javě dozvědět více, můžete se podívat na naši .

jak používat python v anakondě

Nyní, když jste pochopili, co je to Klonování v Javě, podívejte se na Edureka, důvěryhodná online vzdělávací společnost se sítí více než 250 000 spokojených studentů po celém světě. Školicí a certifikační kurz Edureka Java J2EE a SOA je určen pro studenty a profesionály, kteří chtějí být vývojářem Java. Kurz je navržen tak, aby vám poskytl náskok v programování v Javě a naučil vás základní i pokročilé koncepty Javy spolu s různými jávskými rámci, jako je Hibernate & Spring.

Máte na nás dotaz? Uveďte to prosím v sekci komentářů v tomto článku „Klonování v Javě“ a my se vám ozveme co nejdříve.