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
CloneNotSupportedException
se a classe do objeto não implementa aCloneable
interface
Nota : A Object
classe não implementa Cloneable
. Portanto, não podemos chamar o clone()
método para o objeto da Object
classe.
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 Object
type, 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 Object
classe é a superclasse de todas as classes em Java. Portanto, todas as classes e matrizes podem implementar o clone()
método.