Rumah  >  Artikel  >  Java  >  Mengapa Java Membuang Ralat Semasa Membuat Rujukan Statik ke Medan Bukan Statik?

Mengapa Java Membuang Ralat Semasa Membuat Rujukan Statik ke Medan Bukan Statik?

DDD
DDDasal
2024-11-01 11:23:25892semak imbas

Why Does Java Throw an Error When Making a Static Reference to a Non-Static Field?

Rujukan Statik kepada Medan Bukan Statik

Di Java, rujukan statik kepada medan bukan statik boleh menjadi punca ralat. Mari kita teliti contoh khusus untuk memahami dan menyelesaikan isu ini.

Pertimbangkan kod berikut:

<code class="java">public class Account {

    private int id = 0;
    private double balance = 0;

    public static void main(String[] args) {
        Account account = new Account(1122, 20000);
        account.withdraw(balance, 2500);
    }

    public void withdraw(double withdrawAmount) {
        balance -= withdrawAmount;
    }
}</code>

Apabila cuba menyusun kod ini, kami menghadapi ralat berikut:

Cannot make a static reference to the non-static field balance

Ralat ini berlaku kerana kaedah penarikan diisytiharkan sebagai statik, bermakna ia boleh dipanggil terus dari kelas tanpa memerlukan contoh objek. Walau bagaimanapun, medan baki adalah bukan statik, yang bermaksud ia hanya boleh diakses melalui contoh objek.

Untuk membetulkan ralat ini, kami perlu mengubah suai kaedah penarikan untuk mengalih keluar pengisytiharan statiknya:

<code class="java">public void withdraw(double withdrawAmount) {
    balance -= withdrawAmount;
}</code>

Sebagai alternatif, kita boleh menjadikan medan imbangan statik, yang membolehkannya diakses tanpa contoh objek. Walau bagaimanapun, ini tidak selalu diingini kerana ia boleh membawa kepada keadaan boleh ubah dikongsi di kalangan semua kejadian kelas.

Dengan mengikuti prinsip ini, kami boleh mengelakkan ralat sedemikian dan memastikan kod kami mematuhi statik Java dan bukan- garis panduan penggunaan medan statik.

Atas ialah kandungan terperinci Mengapa Java Membuang Ralat Semasa Membuat Rujukan Statik ke Medan Bukan Statik?. 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