Klon obiektu Java ()

Metoda Java Object clone () tworzy płytką kopię obiektu.

W tym przypadku płytka kopia oznacza, że ​​tworzy nowy obiekt i kopiuje wszystkie pola i metody skojarzone z obiektem.

Składnia clone()metody to:

 object.clone()

clone () Parametry

clone()Metoda nie ma żadnych parametrów.

clone () Zwracane wartości

  • zwraca kopię obiektu
  • zgłasza, CloneNotSupportedExceptionjeśli klasa obiektu nie implementuje Cloneableinterfejsu

Uwaga : Objectklasa nie implementuje Cloneable. Dlatego nie możemy wywołać clone()metody dla obiektu Objectklasy.

Przykład 1: klon 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); ) ) )

W powyższym przykładzie utworzyliśmy klasę o nazwie Main. Klasa zawiera nazwę i wersję dwóch pól. Tutaj zainicjowaliśmy pola klasy przy użyciu obiektu obj1 klasy.

Zwróć uwagę na linię,

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

Tutaj użyliśmy clone()metody do utworzenia kopii obj1. Wartość zwracana przez clone()jest przypisywana do obiektu obj2. Ponieważ zwracana wartość clone()jest Objecttypem, użyliśmy jej (Main)do konwersji na typ główny.

Teraz można uzyskać dostęp do nazwy i wersji pól za pomocą obiektu obj2. Jeśli jednak zmienimy wartość pól za pomocą obj2, wartość skojarzona z obj1 nie zostanie zmieniona.

Przykład 2: Zmiana wartości za pomocą sklonowanego obiektu

 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); ) ) )

Zwróć uwagę na linię,

 obj2.name = "Python";

Tutaj zmieniliśmy wartość zmiennej za pomocą obj2. Teraz, kiedy drukujemy nazwę zmiennej zarówno dla obj1, jak i obj2, widzimy, że wartość dla obj1 nie uległa zmianie. Dzieje się tak, ponieważ clone()metoda tworzy płytką kopię obiektów.

Aby dowiedzieć się więcej na temat płytkiej kopii, odwiedź Co to jest płytka kopia w Javie?

Umieściliśmy clone()metodę wewnątrz bloku try… catch języka Java. Dzieje się tak, ponieważ podklasa może zgłosić wyjątek, jeśli obiekt nie może zostać sklonowany.

Uwaga : ObjectKlasa jest nadklasą dla wszystkich klas w Javie. Dlatego każda klasa i tablice mogą implementować tę clone()metodę.

Interesujące artykuły...