„Java“ objektų klonas ()

„Java Object clone“ () metodas sukuria negilų objekto kopiją.

Čia sekli kopija reiškia, kad sukuria naują objektą ir nukopijuoja visus su objektu susijusius laukus ir metodus.

clone()Metodo sintaksė yra tokia:

 object.clone()

klonas () Parametrai

clone()Metodas nesiima jokių parametrų.

klonas () Grąžinimo vertės

  • grąžina objekto kopiją
  • meta, CloneNotSupportedExceptionjei objekto klasė neįdiegia Cloneablesąsajos

Pastaba : Objectklasė neįgyvendinama Cloneable. Taigi negalime vadinti klasės clone()objekto metodo Object.

1 pavyzdys: „Java“ klonas ()

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

Ankstesniame pavyzdyje mes sukūrėme klasę pavadinimu Main. Klasėje yra du laukų pavadinimai ir versijos. Čia mes inicializavome klasės laukus naudodami klasės objektą obj1.

Atkreipkite dėmesį į eilutę,

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

Čia mes naudojome clone()metodą obj1 kopijai sukurti. Grąžinta vertė clone()priskiriama objektui obj2. Kadangi grąžos vertė clone()yra Objecttype, mes ją panaudojome (Main)konvertuoti į Main type.

Dabar laukų pavadinimą ir versiją galima pasiekti naudojant objektą obj2. Tačiau jei pakeisime laukų vertę naudodami obj2, su obj1 susieta vertė nebus pakeista.

2 pavyzdys: vertės keitimas naudojant klonuotą objektą

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

Atkreipkite dėmesį į eilutę,

 obj2.name = "Python";

Čia mes pakeitėme kintamojo vertę naudodami obj2. Dabar, kai atspausdiname kintamojo pavadinimą tiek obj1, tiek obj2, galime pamatyti, kad obj1 reikšmė nepasikeitė. Taip yra todėl, kad clone()metodas sukuria seklią objektų kopiją.

Norėdami sužinoti daugiau apie seklią kopiją, apsilankykite „Kas yra sekli kopija“ „Java“?

Mes uždara su clone()viduje Java pabandyti … sugavimo bloko metodą. Taip yra todėl, kad poklasis gali būti išimtis, jei objekto negalima klonuoti.

Pastaba : Objectklasė yra visų „Java“ klasių superklasė. Taigi, kiekviena klasė ir masyvai gali įgyvendinti clone()metodą.

Įdomios straipsniai...