Клонирование объекта Java ()

Метод Java Object clone () создает неглубокую копию объекта.

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

Синтаксис clone()метода:

 object.clone()

clone () Параметры

clone()Метод не принимает никаких параметров.

clone () Возвращаемые значения

  • возвращает копию объекта
  • выбрасывает, CloneNotSupportedExceptionесли класс объекта не реализует Cloneableинтерфейс

Примечание : Objectкласс не реализует Cloneable. Следовательно, мы не можем вызвать clone()метод для объекта Objectкласса.

Пример 1: Java clone ()

 class Main implements Cloneable ( // declare variables String name; int version; public static void main(String() args) ( // create an object of Main class Main obj1 = new Main(); // initialize name and version using obj1 obj1.name = "Java"; obj1.version = 14; // print variable System.out.println(obj1.name); // Java System.out.println(obj1.version); // 14 try ( // create clone of obj1 Main obj2 = (Main)obj1.clone(); // print the variables using obj2 System.out.println(obj2.name); // Java System.out.println(obj2.version); // 14 ) catch (Exception e) ( System.out.println(e); ) ) )

В приведенном выше примере мы создали класс с именем Main. Класс включает два поля: имя и версия. Здесь мы инициализировали поля класса, используя объект класса obj1.

Обратите внимание на линию,

 Main obj2 = (Main)obj1.clone();

Здесь мы использовали этот clone()метод для создания копии obj1. Возвращаемое значение clone()присваивается объекту obj2. Поскольку возвращаемое значение clone()is Objecttype, мы использовали его (Main)для преобразования в тип Main.

Теперь к имени и версии полей можно получить доступ с помощью объекта obj2. Однако, если мы изменим значение полей с помощью obj2, значение, связанное с obj1, не изменится.

Пример 2: изменение значения с помощью клонированного объекта

 class Main implements Cloneable ( // declare variables String name; int version; public static void main(String() args) ( // create an object of Main class Main obj1 = new Main(); // initialize name and version using obj1 obj1.name = "Java"; obj1.version = 14; // print variable System.out.println(obj1.name); // Java System.out.println(obj1.version); // 14 try ( // create a clone of obj1 Main obj2 = (Main)obj1.clone(); // print the variables using obj2 System.out.println(obj2.name); // Java System.out.println(obj2.version); // 14 // changing value of name // using obj2 obj2.name = "Python"; System.out.println(obj2.name); // Python // check if value associated // with obj1 is changed System.out.println(obj1.name); // Java ) catch (Exception e) ( System.out.println(e); ) ) )

Обратите внимание на линию,

 obj2.name = "Python";

Здесь мы изменили значение переменной с помощью obj2. Теперь, когда мы печатаем имя переменной для obj1 и obj2, мы видим, что значение для obj1 не изменилось. Это потому, что clone()метод делает мелкую копию объектов.

Чтобы узнать больше о мелком копировании, посетите Что такое мелкое копирование в Java?

Мы заключили clone()метод в блок Java try… catch. Это потому, что подкласс может вызвать исключение, если объект не может быть клонирован.

Примечание . ObjectКласс является суперклассом для всех классов в Java. Следовательно, каждый класс и массивы могут реализовать clone()метод.

Интересные статьи...