Какво е клонирането в Java и неговите типове?



Тази статия за клонирането в Java ще ви даде подробна информация за процеса на клониране и различните видове клониране, поддържани от Java.

Докато програмираме, често се натъкваме на сценарии, при които трябва да използваме повторно цялостно парче код. Пренаписването на кода прави програмата обемиста, като същевременно намалява ефективността на програмата. По този начин Java ни предоставя отлична функция, която спасява от тази обременяваща задача. Това е известно като Клониране в Java и чрез медиума на тази статия ще ви дам пълна информация за него.

По-долу са темите, които ще обсъждам в тази статия:





Клониране в Java

Клонирането на обект в Java е процесът на създаване на точно копие на оригиналния обект. С други думи, това е начин за създаване на нов обект чрез копиране на всички данни и атрибути от оригиналния обект. Това е възможно само чрез прилагане на метод clone () на java.lang.Object клас. Клониращият метод създава точно копие на обект, за който е билизвиква се в ред за присвояване на поле по поле и ще връща новата препратка към обект . Едно нещо, което трябва да запомните, в Java, обектите, които изпълняват клониращия интерфейс, който е интерфейс на маркер, имат право да използват clone ().

разлика между окончателно окончателно и финализиране в java

След като вече сте наясно какво е клонирането в Java, нека видим различни предимства от използването на тази функция.



Предимства на клонирането в Java

По-долу изброих няколко от най-интригуващите характеристики на използването на клониране в Java.

  • Помага за намаляване на редовете на кода.
  • Най-ефективният и ефикасен начин за копиранеобекти.
  • Също така, clone () се счита за най-бързият метод за копиране на масив.

Забележка: Въпреки че използването на клониране може да доведе до някои проблеми с дизайна, но ако го използвате по подходящ стратегически начин, това може да ви бъде от полза.

Видове клониране в Java

Клонирането в Java може да бъде групиранов две категории:



  1. Плитко клониране
  2. Дълбоко клониране

Нека разберем всеки един от тях един по един.

Плитко клониране

В Java, когато процесът на клониране се извършва чрез извикване на метода clone (), той се нарича плитко клониране. Това е процес на клониране по подразбиране в Java, където ще бъде създадено плитко копие на оригиналния обект с точно поле. В случай, че оригиналният обект има препратки към някои други обекти като полета, тогава само препратките към този обект ще бъдат клонирани вместо създаването на нов обект. С други думи, ако промените стойността на клонираните обекти, тя ще бъде отразена и в оригинала. По този начин, плиткото клониране зависи от оригиналния обект.

какво е боб в java

плитко копие - Клониране в Java - EdurekaПо-долу съм дал примера на същото:

пакет edureka клас 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 реализира Cloneable {int eduId String LearnerName EduCourse eduCourse public EduLearner (int eduId, String LearnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = LearnerName this.eduCourse = eduCourse} // Версия по подразбиране на clone () метод защитен Object clone () хвърля CloneNotSupportedException {return super .clone ()}} публичен клас ShallowCloneSample {public static void main (String [] args) {EduCourse j2ee = new EduCourse ('Java', 'Spring', 'Microservices') EduLearner Learner1 = new EduLearner (2811, 'Max' , j2ee) EduLearner Learner2 = null try {// Създаване на клонинг на учащ1 и присвояване на Learner2 Learner2 = (EduLearner) Learner1.clone ()} catch (CloneNotSupportedException e) {e.printStackTrace ()} // Детайли за отпечатване на Learner1 System.out.p rintln ('Подробности за учащия 2:') System.out.println ('Id:' + Learner1.eduId) System.out.println ('Име:' + Learner1.learnerName) System.out.println ('Идентификатор на курса: '+ Learner1.eduCourse) // Отпечатване на всички курсове на' Learner1 'System.out.println (' Курсове на обучаем 1: ') System.out.println (Learner1.eduCourse.course1) System.out.println (учащ1. eduCourse.course2) System.out.println (Learner1.eduCourse.course3) // Отпечатване на подробности за Learner2 System.out.println ('Подробности за учащия 2:') System.out.println ('Id:' + Learner2.eduId ) System.out.println ('Име:' + Learner2.learnerName) System.out.println ('Id на курса:' + Learner2.eduCourse) // Печат на всички курсове на 'Learner2' System.out.println ('Курсове на Learner 2: ') System.out.println (Learner2.eduCourse.course1) System.out.println (Learner2.eduCourse.course2) System.out.println (Learner2.eduCourse.course3) // Промяна на курса3 на' Learner2 'Learner2.eduCourse.course3 =' JSP '// Тази промяна ще бъде отразена в оригиналния' Learner1 'System.out.println (' Актуализирани курсове на обучаеми 2: ') System.out.println (Learner1.eduCourse.course1) System.out.println (Learner1.eduCourse.course2) System.out.println (Learner1.eduCourse.course3)}}

Изход:

Подробности за Learner 2: Id: 2811 Име: Max Course Id: EduCourse @ 15db9742 Курсове на учащ 1: Java Spring Microservices Подробности за Learner 2: Id: 2811 Име: Max Id на курса: EduCourse @ 15db9742 Курсове на Learner 2: Java Spring Microservices Актуализирани курсове за учащи 2: Java Spring JSP

Дълбоко клониране в Java

В Java, когато процесът на клониране се извършва чрез внедряване на Cloneable интерфейс, той се нарича Deep Cloning. При този тип клониране ще бъде създадено точно копие на всички полета на оригиналния обект. Но в случай, че оригиналният обект има препратки към други обекти като полета, тогава копие на тези обекти също ще бъде създадено чрез извикване на метода clone (). Това прави клонирания обект независим от оригиналния обект и всички промени, направени в който и да е от обекта, няма да бъдат отразени върху другия.

как да приключите Java програма

По-долу съм дал примера на същото:

пакет edureka клас EduCourse изпълнява Cloneable {String course1 String course2 String course3 public EduCourse (String crs1, String crs2, String crs3) {this.course1 = crs1 this.course2 = crs2 this.course3 = crs3} защитен клонинг на обект () хвърля CloneNotSupportedException return super.clone ()}} клас EduLearner реализира Cloneable {int eduId String LearnerName EduCourse eduCourse public EduLearner (int eduId, String LearnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = LearnerName this.eduCourse = eduCourse} // Заменящ метод clone () за създаване на дълбоко копие на обект защитен Object clone () хвърля CloneNotSupportedException {EduLearner Learner = (EduLearner) super.clone () Learner.eduCourse = (EduCourse) eduCourse.clone () return Learner}} публичен клас DeepCloneSample {public static void main (String [] args) {EduCourse j2ee = new EduCourse ('Java', 'Spring', 'Microservices') EduLearner Learner1 = new EduLearner (2811, 'Max', j2ee) EduLearner learn er2 = null try {// Създаване на клонинг на учащ1 и присвояването му на учащ2 учащ2 = (EduLearner) Learner1.clone ()} catch (CloneNotSupportedException e) {e.printStackTrace ()} // Отпечатване на подробности за Learner1 System.out. println ('Подробности за учащия 2:') System.out.println ('Id:' + Learner1.eduId) System.out.println ('Име:' + Learner1.learnerName) System.out.println ('Идентификатор на курса: '+ Learner1.eduCourse) // Отпечатване на всички курсове на' Learner1 'System.out.println (' Курсове на обучаем 1: ') System.out.println (Learner1.eduCourse.course1) System.out.println (учащ1. eduCourse.course2) System.out.println (Learner1.eduCourse.course3) // Отпечатване на подробности за Learner2 System.out.println ('Подробности за учащия 2:') System.out.println ('Id:' + Learner2.eduId ) System.out.println ('Име:' + Learner2.learnerName) System.out.println ('Id на курса:' + Learner2.eduCourse) // Печат на всички курсове на 'Learner2' System.out.println ('Курсове на Learner 2: ') System.out.println (Learner2.eduCourse.course1) System.out.printl n (Learner2.eduCourse.course2) System.out.println (Learner2.eduCourse.course3) // Промяна на курса3 на 'Learner2' Learner2.eduCourse.course3 = 'JSP' // Тази промяна няма да бъде отразена в оригинала ' Learner1 'System.out.println (' Курсове на обучаем 1: ') System.out.println (Learner1.eduCourse.course1) System.out.println (Learner1.eduCourse.course2) System.out.println (Learner1.eduCourse. course3) // Актуализирани курсове на учащ2 System.out.println ('Курсове на обучаем 2:') System.out.println (Learner2.eduCourse.course1) System.out.println (Learner2.eduCourse.course2) System.out. println (Learner2.eduCourse.course3)}}

Изход:

Подробности за учащия 2: Id: 2811 Име: Max Id на курса: edureka.EduCourse@15db9742 Курсове на обучаем 1: Java Spring Microservices Подробности за учащия 2: Id: 2811 Име: Max Course Id: edureka.EduCourse@6d06d69c Курсове на учащия 2 : Java Spring Microservices Курсове на учащи 1: Java Spring Microservices Курсове на учащи 2: Java Spring JSP

Това ни води до края на тази статия за Клониране в Java. Ако искате да научите повече за Java, можете да се обърнете към нашата .

След като разбрахте какво е клонирането в Java, разгледайте от Edureka, доверена компания за онлайн обучение с мрежа от над 250 000 доволни учащи, разпространени по целия свят. Курсът за обучение и сертифициране на Java J2EE и SOA на Edureka е предназначен за студенти и професионалисти, които искат да бъдат Java Developer. Курсът е предназначен да ви даде начален старт в програмирането на Java и да ви обучи както за основни, така и за разширени Java концепции, заедно с различни Java рамки като Hibernate & Spring.

Имате въпрос към нас? Моля, споменете го в раздела за коментари на тази статия „Клониране в Java“ и ние ще се свържем с вас възможно най-скоро.