Java Object clone () -menetelmä luo matalan kopion objektista.
Tässä matala kopio tarkoittaa, että se luo uuden objektin ja kopioi kaikki objektiin liittyvät kentät ja menetelmät.
Menetelmän syntaksi clone()
on:
object.clone()
klooni () -parametrit
clone()
Menetelmä ei ota parametreja.
klooni () Palautusarvot
- palauttaa objektin kopion
- heittää,
CloneNotSupportedException
jos objektin luokka ei toteutaCloneable
käyttöliittymää
Huomaa : Object
Luokkaa ei toteuteta Cloneable
. Siksi emme voi kutsua luokan clone()
objektin menetelmää Object
.
Esimerkki 1: Java-klooni ()
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); ) ) )
Yllä olevassa esimerkissä olemme luoneet luokan nimeltä Main. Luokka sisältää kaksi kentän nimeä ja versiota. Tässä olemme alustaneet luokan kentät luokan objektilla obj1.
Huomaa rivi,
Main obj2 = (Main)obj1.clone();
Tässä olemme käyttäneet clone()
menetelmää luomaan obj1-kopion. Palautettu arvo clone()
määritetään objektille obj2. Koska paluuarvo clone()
on Object
type, olemme (Main)
muuttaneet sen Main-tyypiksi.
Nyt kenttien nimi ja versio ovat käytettävissä objektilla obj2. Jos kuitenkin muutamme kenttien arvoa obj2: n avulla, obj1: een liittyvää arvoa ei muuteta.
Esimerkki 2: Arvon muuttaminen kloonatun objektin avulla
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); ) ) )
Huomaa rivi,
obj2.name = "Python";
Tässä olemme muuttaneet muuttujan arvoa obj2: n avulla. Nyt kun tulostamme muuttujan nimen sekä obj1: lle että obj2: lle, voimme nähdä, että obj1: n arvo ei ole muuttunut. Tämä johtuu siitä, että clone()
menetelmä tekee esineiden matalan kopion.
Lisätietoja matalasta kopiosta on kohdassa Mikä on matala kopio Java-ohjelmassa?
Olemme liittäneet clone()
menetelmän Java try … catch block -laajentoon. Se johtuu siitä, että alaluokka voi heittää poikkeuksen, jos kohdetta ei voida kloonata.
Huomaa : Object
Luokka on kaikkien Java-luokkien superluokka. Näin ollen jokainen luokka ja taulukot voivat toteuttaa clone()
menetelmän.