Klon predmeta Java ()

Metoda Java Object clone () ustvari plitvo kopijo predmeta.

Tu plitka kopija pomeni, da ustvari nov objekt in kopira vsa polja in metode, povezane s predmetom.

Sintaksa clone()metode je:

 object.clone()

klon () Parametri

clone()Metoda ne sprejme nobenih parametrov.

clone () Vrnjene vrednosti

  • vrne kopijo predmeta
  • vrže, CloneNotSupportedExceptionče razred predmeta ne izvaja Cloneablevmesnika

Opomba : ObjectRazred se ne izvaja Cloneable. Zato clone()metode predmeta predmeta ne moremo poklicati Object.

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

V zgornjem primeru smo ustvarili razred z imenom Main. Razred vključuje dve polji ime in različico. Tu smo inicializirali polja razreda z uporabo predmeta obj1 razreda.

Opazite vrstico,

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

Tu smo clone()metodo uporabili za ustvarjanje kopije obj1. Vrednost, ki jo vrne, clone()je dodeljena predmetu obj2. Ker je povratna vrednost clone()je Objectvrsta, smo uporabili (Main), da jo pretvori v glavnem tipa.

Zdaj lahko do imena in različice polj dostopate s pomočjo predmeta obj2. Če pa spremenimo vrednost polj z uporabo obj2, vrednost, povezana z obj1, ne bo spremenjena.

Primer 2: Spreminjanje vrednosti s kloniranim predmetom

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

Opazite vrstico,

 obj2.name = "Python";

Tu smo spremenili vrednost spremenljivke z uporabo obj2. Zdaj, ko izpišemo ime spremenljivke za obj1 in obj2, lahko vidimo, da se vrednost za obj1 ni spremenila. To je zato, ker clone()metoda naredi plitvo kopijo predmetov.

Če želite izvedeti več o plitvi kopiji, obiščite Kaj je plitka kopija v Javi?

clone()Metodo smo priložili bloku Java try … catch. To je zato, ker lahko podrazred vrže izjemo, če predmeta ni mogoče klonirati.

Opomba : ObjectRazred je superrazred za vse razrede v Javi. Zato lahko vsak razred in polja implementirajo clone()metodo.

Zanimive Članki...