Clone do objeto Java ()

O método clone () do objeto Java cria uma cópia superficial do objeto.

Aqui, a cópia superficial significa que ela cria um novo objeto e copia todos os campos e métodos associados ao objeto.

A sintaxe do clone()método é:

 object.clone()

Parâmetros clone ()

O clone()método não leva nenhum parâmetro.

clone () Valores de Retorno

  • retorna a cópia do objeto
  • lança CloneNotSupportedExceptionse a classe do objeto não implementa a Cloneableinterface

Nota : A Objectclasse não implementa Cloneable. Portanto, não podemos chamar o clone()método para o objeto da Objectclasse.

Exemplo 1: clone 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); ) ) )

No exemplo acima, criamos uma classe chamada Main. A classe inclui dois campos nome e versão. Aqui, inicializamos os campos da classe usando o objeto obj1 da classe.

Observe a linha,

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

Aqui, usamos o clone()método para criar uma cópia de obj1. O valor retornado por clone()é atribuído ao objeto obj2. Como o valor de retorno de clone()is Objecttype, usamos (Main)para convertê-lo no tipo Main.

Agora os campos nome e versão podem ser acessados ​​usando o objeto obj2. No entanto, se alterarmos o valor dos campos usando obj2, o valor associado a obj1 não será alterado.

Exemplo 2: Alterar o valor usando objeto clonado

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

Observe a linha,

 obj2.name = "Python";

Aqui, alteramos o valor da variável usando obj2. Agora, quando imprimimos o nome da variável para obj1 e obj2, podemos ver que o valor para obj1 não mudou. É porque o clone()método faz a cópia superficial dos objetos.

Para saber mais sobre cópia superficial, visite O que é cópia superficial em Java?

Incluímos o clone()método dentro do bloco Java try… catch. É porque a subclasse pode lançar a exceção se o objeto não puder ser clonado.

Observação : a Objectclasse é a superclasse de todas as classes em Java. Portanto, todas as classes e matrizes podem implementar o clone()método.

Artigos interessantes...