Java Object clone ()

Il metodo Java Object clone () crea una copia superficiale dell'oggetto.

Qui, la copia superficiale significa che crea un nuovo oggetto e copia tutti i campi e i metodi associati all'oggetto.

La sintassi del clone()metodo è:

 object.clone()

parametri clone ()

Il clone()metodo non accetta parametri.

clone () Valori restituiti

  • restituisce la copia dell'oggetto
  • genera CloneNotSupportedExceptionse la classe dell'oggetto non implementa l' Cloneableinterfaccia

Nota : la Objectclasse non implementa Cloneable. Quindi, non possiamo chiamare il clone()metodo per l'oggetto della Objectclasse.

Esempio 1: Java clone ()

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

Nell'esempio precedente, abbiamo creato una classe denominata Main. La classe include due campi nome e versione. Qui, abbiamo inizializzato i campi della classe utilizzando l'oggetto obj1 della classe.

Notare la linea,

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

Qui abbiamo utilizzato il clone()metodo per creare una copia di obj1. Il valore restituito da clone()viene assegnato all'oggetto obj2. Poiché il valore restituito di clone()è Objecttipo, lo abbiamo (Main)convertito in tipo Main.

Ora è possibile accedere al nome e alla versione dei campi utilizzando l'oggetto obj2. Tuttavia, se modifichiamo il valore dei campi utilizzando obj2, il valore associato a obj1 non verrà modificato.

Esempio 2: modifica del valore utilizzando un oggetto clonato

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

Notare la linea,

 obj2.name = "Python";

Qui, abbiamo modificato il valore della variabile utilizzando obj2. Ora, quando stampiamo il nome della variabile sia per obj1 che per obj2, possiamo vedere che il valore per obj1 non è cambiato. È perché il clone()metodo crea la copia superficiale degli oggetti.

Per saperne di più sulla copia superficiale, visita Cos'è la copia superficiale in Java?

Abbiamo racchiuso il clone()metodo all'interno del blocco try… catch di Java. È perché la sottoclasse può generare l'eccezione se l'oggetto non può essere clonato.

Nota : la Objectclasse è la superclasse per tutte le classi in Java. Quindi, ogni classe e ogni array può implementare il clone()metodo.

Articoli interessanti...