Методът 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()
метода.