Rumah  >  Artikel  >  Java  >  Bagaimana untuk menyelesaikan pengecualian rujukan kitaran Java (CyclicReferenceException)

Bagaimana untuk menyelesaikan pengecualian rujukan kitaran Java (CyclicReferenceException)

WBOY
WBOYasal
2023-08-27 12:18:371146semak imbas

Bagaimana untuk menyelesaikan pengecualian rujukan kitaran Java (CyclicReferenceException)

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.

  1. Definisi:
    Rujukan bulat bermaksud dua atau lebih objek merujuk antara satu sama lain, membentuk struktur gelung tertutup. Jika program cuba menyelesaikan rujukan pekeliling sedemikian, ia akan mengakibatkan pengulangan yang tidak terhingga. Di Jawa, rujukan bulat mungkin berlaku dalam kelas koleksi, kelas bersarang, persatuan objek, dll.
  2. Punca:
    Rujukan pekeliling biasanya berlaku apabila pembangun tidak berhati-hati, seperti tetapan perkaitan objek yang salah, elemen dalam kelas koleksi yang merujuk antara satu sama lain, dsb. Sebagai contoh, objek ibu bapa merujuk objek kanak-kanak, dan objek kanak-kanak merujuk objek induk.
  3. Penyelesaian:
    Untuk menyelesaikan pengecualian rujukan bulat, kita boleh mengambil kaedah berikut:

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 Rujukan Lemah. Dengan cara ini, walaupun terdapat rujukan pekeliling, pemungut sampah masih boleh menuntutnya semula selagi tiada rujukan kukuh lain yang menunjuk kepada objek tersebut. WeakReference来存储被引用对象的实例。这样即使存在循环引用,只要没有其他强引用指向对象,垃圾回收器仍然可以回收它们。

3.2 延迟初始化:
另一种避免循环引用的方法是延迟初始化。延迟初始化是指等到被引用对象真正需要被使用时,才进行初始化。这样可以避免在对象间建立循环引用。

public class CyclicReferenceExample {
    private CyclicReferenceExample reference;

    public CyclicReferenceExample getReference() {
        if (reference == null) {
            reference = new CyclicReferenceExample();
        }
        return reference;
    }
    //...
}

上述代码中,当调用getReference()方法时,如果reference

3.2 Pemulaan malas:

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

Dalam kod di atas, apabila kaedah getReference() dipanggil, jika objek reference belum dimulakan lagi, operasi pemulaan dilakukan. Ini boleh mengelakkan rujukan pekeliling dengan berkesan.

Kesimpulan:
    Dalam pengaturcaraan Java, rujukan pekeliling adalah masalah biasa yang mungkin menyebabkan pengecualian program. Artikel ini menerangkan definisi dan punca rujukan bulat dan menyediakan dua kaedah untuk menyelesaikan pengecualian rujukan bulat: menggunakan rujukan lemah dan pengamulaan malas. Dengan menggunakan kaedah ini, masalah rujukan pekeliling dapat diselesaikan dengan berkesan dan kebolehpercayaan dan prestasi program dapat dipertingkatkan.
  • Rujukan:
🎜🎜WeakReference (Java Platform SE 8) – Pusat Bantuan Oracle [https://docs.oracle.com/javase/8/docs/api/java/lang/ref/WeakReference.html](https : //docs.oracle.com/javase/8/docs/api/java/lang/ref/WeakReference.html)🎜🎜

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!

Kenyataan:
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