Клон на Java Object ()

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

Тук плиткото копие означава, че създава нов обект и копира всички полета и методи, свързани с обекта.

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

 object.clone()

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

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

clone () Връщани стойности

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

Забележка : ObjectКласът не се изпълнява Cloneable. Следователно не можем да извикаме clone()метода за обекта на Objectкласа.

Пример 1: Java клонинг ()

 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()е Objectтип, ние сме го използвали (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()метода.

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