Cara menyelesaikan Java Cyclic ReferenceException
Abstrak:
Dalam pengaturcaraan Java, rujukan pekeliling ialah masalah biasa yang mungkin menyebabkan pengecualian dalam atur cara. Artikel ini akan memperkenalkan definisi dan punca rujukan bulat, dan menyediakan beberapa kaedah untuk menyelesaikan pengecualian rujukan bulat, termasuk menggunakan rujukan yang lemah, pengamulaan malas, dsb.
Pengenalan:
Dalam pengaturcaraan Java, rujukan bersama antara objek adalah fenomena biasa. Apabila terdapat rujukan bulat antara objek, ia boleh menyebabkan pengecualian program. Salah satu pengecualian yang paling biasa ialah CyclicReferenceException, yang menunjukkan bahawa operasi yang berterusan menyebabkan rujukan kitaran tidak terhingga.
3.1 Gunakan rujukan yang lemah:
Menggunakan rujukan yang lemah boleh mengelakkan kebocoran memori yang disebabkan oleh rujukan bulat. Rujukan lemah bermakna apabila objek hanya mempunyai rujukan yang lemah, pemungut sampah masih boleh mengitar semula objek secara automatik walaupun memori tidak mencukupi. Di Java, anda boleh menggunakan kelas WeakReference untuk mencipta rujukan yang lemah. Berikut ialah contoh kod:
import java.lang.ref.WeakReference; public class CyclicReferenceExample { private WeakReference<CyclicReferenceExample> reference; public void setReference(CyclicReferenceExample c) { reference = new WeakReference<>(c); } //... }
Dalam kod di atas, tika objek yang dirujuk disimpan dengan menggunakan rujukan lemah WeakReference
来存储被引用对象的实例。这样即使存在循环引用,只要没有其他强引用指向对象,垃圾回收器仍然可以回收它们。
3.2 延迟初始化:
另一种避免循环引用的方法是延迟初始化。延迟初始化是指等到被引用对象真正需要被使用时,才进行初始化。这样可以避免在对象间建立循环引用。
public class CyclicReferenceExample { private CyclicReferenceExample reference; public CyclicReferenceExample getReference() { if (reference == null) { reference = new CyclicReferenceExample(); } return reference; } //... }
上述代码中,当调用getReference()
方法时,如果reference
Cara lain untuk mengelakkan rujukan bulat ialah pemulaan malas. Inisialisasi malas bermakna menunggu sehingga objek yang dirujuk sebenarnya diperlukan sebelum memulakannya. Ini mengelakkan membuat rujukan bulat antara objek.
rrreee
getReference()
dipanggil, jika objek reference
belum dimulakan lagi, operasi pemulaan dilakukan. Ini boleh mengelakkan rujukan pekeliling dengan berkesan. Kesimpulan: Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan pengecualian rujukan kitaran Java (CyclicReferenceException). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!