Kaedah
clone() digunakan untuk mencipta salinan objek kelas yang melaksanakan antara muka Cloneable. Secara lalai, ia menyalin medan mengikut medan kerana kelas Objek tidak mengetahui ahli kelas tertentu yang objeknya memanggil kaedah ini. Jadi jika kelas hanya mempunyai ahli jenis data primitif, salinan baharu objek akan dibuat dan rujukan kepada salinan baharu objek akan dikembalikan. Walau bagaimanapun, jika kelas mengandungi ahli mana-mana jenis kelas, hanya rujukan objek kepada ahli tersebut akan disalin, jadi rujukan ahli dalam kedua-dua objek asal dan klon merujuk kepada objek yang sama.
Jika kami cuba memanggil kaedah clone() pada objek kelas yang tidak melaksanakan antara muka Cloneable , kami akan menerima CloneNotSupportedException . Antara muka ini ialah antara muka berteg, pelaksanaannya hanya menunjukkan bahawa kaedah Object.clone() boleh dipanggil pada objek kelas pelaksana.
<strong>protected Object clone() throws CloneNotSupportedException</strong>
Kita boleh melaksanakan kaedah klon() dalam dua cara
Ini adalah hasil daripada fungsi pengklonan lalai yang disediakan oleh kaedah Object.clone() (jika kelas juga mempunyai bukan- ahli jenis data asas) . Dalam kes salinan cetek, objek klon juga merujuk kepada objek yang sama yang dirujuk oleh objek asal kerana hanya rujukan objek disalin dan bukan objek yang dirujuk.
public class ShallowCopyTest { public static void main(String args[]) { A a1 = new A(); A a2 = (A) a1.clone(); a1.sb.append("Tutorialspoint!"); System.out.println(a1); System.out.println(a2); } } class A implements Cloneable { public StringBuffer sb = new StringBuffer("Welcome to "); public String toString() { return sb.toString(); } public Object clone() { try { return super.clone(); } catch(CloneNotSupportedException e) { } return null; } }
Welcome to Tutorialspoint! Welcome to Tutorialspoint!
Kita perlu mengatasi klon()ahli kaedah untuk kelas salinan bukan asas juga perlu dilaksanakan, kerana ia juga perlu dilaksanakan oleh kelas jenis salinan bukan asas objek ahli, Mekanisme pengklonan lalai tidak melakukan ini.
Contohpublic class DeepCopyTest { public static void main(String args[]) { A a1 = new A(); A a2 = (A) a1.clone(); a1.sb.append(" TutorialsPoint!"); System.out.println(a1); System.out.println(a2); } } class A implements Cloneable { public StringBuffer sb = new StringBuffer("Welcome to "); public String toString() { return sb.toString(); } public Object clone() { try { A a = (A) super.clone(); a.sb = new StringBuffer(sb.toString()); return a; } catch(CloneNotSupportedException e) { } return null; } }
Welcome to TutorialsPoint! Welcome to
Atas ialah kandungan terperinci Apakah kepentingan kaedah klon() dalam Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!