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



Эта статья о клонировании в Java даст вам подробное представление о процессе клонирования и различных типах клонирования, поддерживаемых Java.

Во время программирования мы часто сталкиваемся со сценариями, когда нам нужно повторно использовать весь код. Переписывание кода делает программу громоздкой, в то же время снижая эффективность программы. Таким образом, Java предоставляет нам отличную возможность, которая избавляет именно от этой обременительной задачи. Это известно как клонирование в Java, и в этой статье я дам вам полное представление о нем.

Ниже приведены темы, которые я буду обсуждать в этой статье:





Клонирование на Java

Клонирование объекта в Java - это процесс создания точной копии исходного объекта. Другими словами, это способ создания нового объекта путем копирования всех данных и атрибутов из исходного объекта. Это возможно только путем реализации метода clone () объекта java.lang.Object класс. Метод clone создает точную копию объекта, для которого он былвызывается в порядке присвоения полей и возвращает ссылку на новый объект . Вы должны помнить одну вещь: в Java объектам, реализующим интерфейс клонирования, который является интерфейсом маркера, разрешено использовать clone ().

Теперь, когда вы знаете, что клонируется в Java, давайте рассмотрим различные преимущества использования этой функции.



Преимущества клонирования на Java

Ниже я перечислил некоторые из наиболее интересных особенностей использования клонирования в Java.

  • Помогает сократить количество строк кода.
  • Самый действенный и действенный способ копированияобъекты.
  • Кроме того, clone () считается самым быстрым методом копирования массива.

Примечание. Хотя использование клонирования может привести к некоторым проблемам с дизайном, но при правильном стратегическом использовании оно может принести вам пользу.

Типы клонирования в Java

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



  1. Мелкое клонирование
  2. Глубокое клонирование

Давайте разберемся с каждым из них по порядку.

Мелкое клонирование

В Java, когда процесс клонирования выполняется путем вызова метода clone (), он называется поверхностным клонированием. Это процесс клонирования по умолчанию в Java, при котором будет создана неглубокая копия исходного объекта с точным полем. В случае, если исходный объект имеет ссылки на некоторые другие объекты в виде полей, тогда будут клонированы только ссылки этого объекта, а не создание нового объекта. Другими словами, если вы измените значение клонированных объектов, оно также будет отражено в оригинале. Таким образом, поверхностное клонирование зависит от исходного объекта.

мелкая копия - Клонирование на Java - EdurekaНиже я привел пример того же:

package edureka class EduCourse {String course1 String course2 String course3 общедоступный EduCourse (String crs1, String crs2, String crs3) {this.course1 = crs1 this.course2 = crs2 this.course3 = crs3}} класс EduLearner реализует Cloneable {int eduId String LearnerN EduCourse eduCourse public EduLearner (int eduId, String LearnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = LearnerName this.eduCourse = eduCourse} // Версия метода clone () по умолчанию, защищенная cloneNception (), выдает суперпользователь CloneNception () {выдает 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 {// Создание клона Learner1 и присвоение его 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 (' Courses of Learner 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 ('Id:' + Learner2.eduId ) System.out.println ('Имя:' + Learner2.learnerName) System.out.println ('Идентификатор курса:' + Learner2.eduCourse) // Печать всех курсов 'Learner2' System.out.println ('Курсы учащегося 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)}}

Вывод:

Подробная информация об учащемся 2: Id: 2811 Имя: Максимальный идентификатор курса: EduCourse @ 15db9742 Курсы для учащегося 1: микросервисы Java Spring Подробные сведения об учащемся 2: Id: 2811 Имя: Максимальный идентификатор курса: EduCourse @ 15db9742 Курсы учащегося 2: Java Spring Microservices Обновленные курсы для учащегося 2: Java Spring JSP

Глубокое клонирование на Java

В Java, когда процесс клонирования выполняется путем реализации интерфейса Cloneable, он называется глубоким клонированием. При этом типе клонирования будет создана точная копия всех полей исходного объекта. Но в случае, если исходный объект имеет ссылки на другие объекты в виде полей, тогда копия этих объектов также будет создана путем вызова метода clone (). Это делает клонированный объект независимым от исходного объекта, и любые изменения, внесенные в один из объектов, не отражаются на другом.

как подключить базу данных mysql в java

Ниже я привел пример того же:

пакет edureka class EduCourse реализует Cloneable {String course1 String course2 String course3 общедоступным EduCourse (String crs1, String crs2, String crs3) {this.course1 = crs1 this.course2 = crs2 this.course3 = crs3} защищенный объект clone () выбрасывает CloneNotSupported return super.clone ()}} Класс EduLearner реализует Cloneable {int eduId String LearnerName EduCourse eduCourse public EduLearner (int eduId, String LearnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = eduCourseName = LearnerName} // LearnerName this. Переопределение метода 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 {// Создание клона Learner1 и назначение его Learner2 Learner2 = (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 (' Courses of Learner 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 ('Id:' + Learner2.eduId ) System.out.println ('Имя:' + Learner2.learnerName) System.out.println ('Идентификатор курса:' + Learner2.eduCourse) // Печать всех курсов 'Learner2' System.out.println ('Курсы учащегося 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 Имя: Максимальный идентификатор курса: edureka.EduCourse@15db9742 Курсы для учащегося 1: микросервисы Java Spring Сведения об учащемся 2: Id: 2811 Имя: Максимальный идентификатор курса: edureka.EduCourse@6d06d69c Курсы для учащегося 2 : Курсы по микросервисам Java Spring для учащегося 1: Курсы по микросервисам Java Spring для учащегося 2: Java Spring JSP

На этом мы подошли к концу статьи о клонировании в Java. Если вы хотите узнать больше о Java, вы можете обратиться к нашему .

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

Есть вопрос к нам? Пожалуйста, укажите это в комментариях к этой статье «Клонирование в Java», и мы свяжемся с вами в ближайшее время.