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

Apakah kepentingan kaedah klon() dalam Java?

王林
王林ke hadapan
2023-09-14 14:25:02857semak imbas

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>

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

Output

Welcome to Tutorialspoint!
Welcome to Tutorialspoint!

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

Output

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!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam