Клон об'єкта Java ()

Метод клонування Java Object () створює неглибоку копію об'єкта.

Тут дрібна копія означає, що вона створює новий об'єкт і копіює всі поля та методи, пов'язані з об'єктом.

Синтаксис 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()метод.

Цікаві статті...