A Java Object clone () metódus sekély másolatot hoz létre az objektumból.
Itt a sekély másolat azt jelenti, hogy új objektumot hoz létre, és az objektumhoz tartozó összes mezőt és metódust lemásolja.
A clone()
módszer szintaxisa :
object.clone()
clone () Paraméterek
A clone()
módszer nem vesz fel paramétereket.
clone () Visszatérési értékek
- az objektum másolatát adja vissza
- dob,
CloneNotSupportedException
ha az objektum osztálya nem valósítja meg azCloneable
interfészt
Megjegyzés : Az Object
osztály nem valósítja meg Cloneable
. Ezért nem hívhatjuk clone()
meg az Object
osztály objektumának metódusát .
1. példa: Java klón ()
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); ) ) )
A fenti példában létrehoztunk egy Main nevű osztályt. Az osztály két mező nevét és verzióját tartalmazza. Itt inicializáltuk az osztálymezőket az osztály obj1 objektumának felhasználásával.
Figyelje meg a sort,
Main obj2 = (Main)obj1.clone();
Itt clone()
az Obj1 másolatának létrehozására használtuk a módszert. A visszaadott érték clone()
az objektum objektumhoz van rendelve. Mivel a visszatérési értéke clone()
van Object
típus, már használt (Main)
alakításra Main típusát.
A mezők neve és verziója az obj2 objektummal érhető el. Ha azonban megváltoztatjuk a mezők értékét az obj2 használatával, akkor az obj1-hez társított érték nem változik.
2. példa: Érték megváltoztatása klónozott objektum használatával
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); ) ) )
Figyelje meg a sort,
obj2.name = "Python";
Itt megváltoztattuk a változó értékét az obj2 segítségével. Most, amikor az obj1 és az obj2 változó nevét kinyomtatjuk, láthatjuk, hogy az obj1 értéke nem változott. A clone()
módszer ugyanis az objektumok sekély másolatát készíti el.
Ha többet szeretne megtudni a sekély másolásról, keresse fel a Mi az a sekély másolás Java-ban?
A clone()
módszert a Java try… catch blokkba csatoltuk. Az alosztály ugyanis kivetheti a kivételt, ha az objektum nem klónozható.
Megjegyzés : Az Object
osztály a Java összes osztályának szuperosztálya. Ezért minden osztály és tömb megvalósíthatja a clone()
módszert.