Clona obiect Java ()

Metoda Java Object clone () creează o copie superficială a obiectului.

Aici, copia superficială înseamnă că creează un obiect nou și copiază toate câmpurile și metodele asociate cu obiectul.

Sintaxa clone()metodei este:

 object.clone()

clone () Parametri

clone()Metoda nu ia nici un parametru.

clone () Valori returnate

  • returnează copia obiectului
  • aruncă CloneNotSupportedExceptiondacă clasa obiectului nu implementează Cloneableinterfața

Notă : ObjectClasa nu se implementează Cloneable. Prin urmare, nu putem apela clone()metoda pentru obiectul Objectclasei.

Exemplul 1: clona 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); ) ) )

În exemplul de mai sus, am creat o clasă numită Main. Clasa include două câmpuri nume și versiune. Aici, am inițializat câmpurile clasei folosind obiectul obj1 al clasei.

Observați linia,

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

Aici, am folosit clone()metoda pentru a crea o copie a obiect1. Valoarea returnată de clone()este atribuită obiectului obj2. Deoarece valoarea returnată clone()este de Objecttip, am folosit-o (Main)pentru a o converti în tip principal.

Acum câmpurile numele și versiunea pot fi accesate folosind obiectul obj2. Cu toate acestea, dacă schimbăm valoarea câmpurilor folosind obj2, valoarea asociată cu obj1 nu va fi modificată.

Exemplul 2: Modificarea valorii utilizând obiectul clonat

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

Observați linia,

 obj2.name = "Python";

Aici, am schimbat valoarea variabilei folosind obj2. Acum, când imprimăm numele variabilei atât pentru obj1 cât și pentru obj2, putem vedea că valoarea pentru obj1 nu s-a schimbat. Acest lucru se datorează faptului că clone()metoda face o copie superficială a obiectelor.

Pentru a afla mai multe despre copierea superficială, accesați Ce este copierea superficială în Java?

Am inclus clone()metoda în blocul Java try … catch. Acest lucru se datorează faptului că subclasa poate arunca excepția dacă obiectul nu poate fi clonat.

Notă : ObjectClasa este superclasa pentru toate clasele din Java. Prin urmare, fiecare clasă și matrice pot implementa clone()metoda.

Articole interesante...