Klon Java objekta ()

Metoda Java Object clone () stvara plitku kopiju objekta.

Ovdje plitka kopija znači da stvara novi objekt i kopira sva polja i metode povezane s objektom.

Sintaksa clone()metode je:

 object.clone()

clone () Parametri

clone()Metoda ne poduzimati nikakve parametre.

clone () Povratne vrijednosti

  • vraća kopiju predmeta
  • baca CloneNotSupportedExceptionako klasa objekta ne implementira Cloneablesučelje

Napomena : ObjectKlasa se ne provodi Cloneable. Stoga ne možemo pozvati clone()metodu za objekt Objectklase.

Primjer 1: Java klon ()

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

U gornjem primjeru stvorili smo klasu pod nazivom Main. Klasa uključuje dva polja naziv i verziju. Ovdje smo inicijalizirali polja klase pomoću objekta obj1 klase.

Primijetite crtu,

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

Ovdje smo koristili clone()metodu za stvaranje kopije obj1. Vrijednost koju clone()je vratio dodjeljuje se objektu obj2. Budući da je povratak vrijednost clone()je Objecttipa, koristili smo (Main)ga pretvoriti u glavnom tipa.

Sada se imenu i verziji polja može pristupiti pomoću objekta obj2. Međutim, ako promijenimo vrijednost polja pomoću obj2, vrijednost povezana s obj1 neće se promijeniti.

Primjer 2: Promjena vrijednosti pomoću kloniranog objekta

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

Primijetite crtu,

 obj2.name = "Python";

Ovdje smo promijenili vrijednost varijable pomoću obj2. Sada kada ispisujemo ime varijable i za obj1 i za obj2, možemo vidjeti da se vrijednost za obj1 nije promijenila. To je zato što clone()metoda pravi plitku kopiju predmeta.

Da biste saznali više o plitkom kopiranju, posjetite Što je plitko kopiranje u Javi?

clone()Metodu smo zatvorili u blok Java try … catch. To je zato što podrazred može izbaciti iznimku ako se objekt ne može klonirati.

Napomena : ObjectRazred je superrazred za sve razrede u Javi. Dakle, svaka klasa i nizovi mogu implementirati clone()metodu.

Zanimljivi članci...