1 Clone objek asli yang dilindungi () melempar clonenotsupportedException;
1. Metode dimodifikasi oleh kata kunci asli
Kata kunci asli di Java menunjukkan bahwa metode ini adalah metode lokal, [deskripsi asli Java]. Selain itu, efisiensi eksekusi metode modifikasi asli lebih tinggi daripada modifikasi non- asli .
2. Metode ini dimodifikasi dengan dilindungi
Ketika kelas menimpa metode klon (), ia perlu dimodifikasi menjadi pengubah akses publik, sehingga dapat memastikan bahwa semua kelas lain dapat mengakses metode kelas ini.
3. Metode melempar pengecualian clonenotsupported exception
Jika suatu kelas ingin mengganti metode klon (), ia harus mengimplementasikan antarmuka java.lang.Clonable itu sendiri, jika tidak, clonenotsupportedException akan dilemparkan.
2. Peran klon ()
Catatan: Objek di sini secara khusus merujuk ke tipe yang kompleks.
1. Sederhana = Operasi
Kita tahu bahwa objek jenis kompleks di Java adalah semua jenis referensi, dan mereka sering menyimpan alamat memori objek. Oleh karena itu, kami tidak dapat hanya menetapkan operasi nilai sebagai operator = . Kami menetapkan objek A ke objek lain B, dan kami cukup menetapkan alamat memori objek A ke B sehingga keduanya menunjuk ke alamat memori yang sama. Konsekuensi dari ini adalah bahwa modifikasi pada salah satu objek akan mempengaruhi objek lain. Gambar berikut menunjukkan:
Orang p1 = orang baru (); orang p2 = p1;
2. Clone ()
Menggunakan metode clone (), Anda dapat dengan cepat membuat salinan objek, dan dua objek menunjuk ke alamat memori yang berbeda. Gambar berikut menunjukkan:
Orang p1 = orang baru (); orang p2 = p1.clone ();
3. Klon Dangkal dan Kloning Dalam1, Klon Dangkal (Salinan Dangkal)
Klon dangkal mengacu pada bidang dalam objek klon itu sendiri, bukan objek klon. Hanya panggil super.clone (), hanya klon yang dangkal. Meskipun objek yang disalin menunjuk ke alamat memori yang berbeda, bidang pada objek masih menunjuk ke alamat memori yang sama dengan objek sebelumnya.
Kelas Public DawhoLClone mengimplementasikan nama string publik yang dapat dikloning; Usia int publik; orang publik; public deldowclone () {} public dangkalclone (nama string, usia int, orang orang) {this.name = name; this.age = usia; this.person = orang; } @Override public dallowclone clone () {dallowclone c = null; coba {c = (dangkalclone) super.clone (); kembali C; } catch (clonenotsupportedException e) {e.printstacktrace (); } return c; } public static void main (string [] args) {person p = new orang (); p.name = "p"; P.age = 10; Dangkal c1 = dangkal baru ("jim", 18, p); System.out.printf ("Sebelum Klon: C1 = %S, C1.PERSON = %S/N", C1, C1.PERSON); Dangkal C2 = c1.clone (); System.out.printf ("After Clone: C2 = %S, C2.Person = %S/N", C2, C2.Person); }}Jalankan output utama ():
Sebelum klon: c1 = cre.sample.test.object.shallowclone@558385e3, c1.person = cre.sample.test.person@2dcb25f1 setelah klon: c2 = cre.sample.test.object.shallowclone@742808b3, c2.p2.pon -test.pallowclone@742808B3, CRE.P2. cre.sample.test.person@2dcb25f1
Dengan cara ini, alamat memori objek dangkal telah berubah, tetapi alamat memori bidang orang dalam objek tidak berubah;
2. Clone Deep (salinan dalam)
Clone yang dalam mengacu pada bidang dalam objek klon itu sendiri dan juga objek klon.
/*** Contoh kode klon dalam* dibuat oleh Cregu pada 2016/6/9. */Public Class DeepClone mengimplementasikan clonable {public string name; Usia int publik; orang publik; Public DeepClone () {} public DeepClone (nama string, int usia, orang orang) {this.name = name; this.age = usia; this.person = orang; } @Override Public DeepClone Clone () {DeepClone C = null; coba {c = (deepclone) super.clone (); C.Person = person.clone (); kembali C; } catch (clonenotsupportedException e) {e.printstacktrace (); } return c; } public static void main (string [] args) {person p = new orang (); p.name = "p"; P.age = 10; DeepClone C1 = DeepClone baru ("Jim", 18, p); System.out.printf ("Sebelum Klon: C1 = %S, C1.PERSON = %S/N", C1, C1.PERSON); DeepClone C2 = C1.Clone (); System.out.printf ("After Clone: C2 = %S, C2.Person = %S/N", C2, C2.Person); }}Jalankan output utama ():
sebelum klon: c1 = cre.sample.test.object.deepclone@558385e3, c1.person = cre.sample.test.person@2dcb25f1 sebelum klon: c2 = cre.sample.test.object.deepclone@742808b3, cree.pere.pere.deepclone@742808b3, cree.pere.pon.pere.pere.plone@742808b3, cree.poner
Dalam hal ini, alamat memori objek DeepClone telah berubah, tetapi alamat memori bidang orang dalam objek juga telah berubah.
Analisis komprehensif di atas dari metode klon objek Java adalah semua konten yang saya bagikan dengan Anda. Saya harap Anda dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.