Rumah > Java > javaTutorial > Apakah kepentingan kaedah klon() dalam Java?

Apakah kepentingan kaedah klon() dalam Java?

王林
Lepaskan: 2023-09-14 14:25:02
ke hadapan
873 orang telah melayarinya

Kaedah

Apakah kepentingan kaedah klon() dalam Java?

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.

Syntax

<strong>protected Object clone() throws CloneNotSupportedException</strong>
Salin selepas log masuk

Kita boleh melaksanakan kaedah klon() dalam dua cara

Salinan cetek

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.

Contoh

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;
   }
}
Salin selepas log masuk

Output

Welcome to Tutorialspoint!
Welcome to Tutorialspoint!
Salin selepas log masuk

Salinan mendalam

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.

Contoh

public 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;
   }
}
Salin selepas log masuk

Output

Welcome to TutorialsPoint!
Welcome to
Salin selepas log masuk

Atas ialah kandungan terperinci Apakah kepentingan kaedah klon() dalam Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan