Rumah > Java > javaTutorial > teks badan

Mengapa Tidak Menggunakan Kaedah Statik pada Rujukan Objek Null Membuang NullPointerException?

DDD
Lepaskan: 2024-11-03 03:57:30
asal
783 orang telah melayarinya

Why Doesn't Invoking a Static Method on a Null Object Reference Throw a NullPointerException?

Mengapa Tidak Menggunakan Kaedah Statik pada Rujukan Objek Null Membuang NullPointerException?

Di Java, lazimnya difahami bahawa menggunakan kaedah pada rujukan objek null mencetuskan NullPointerException. Walau bagaimanapun, pengecualian ini tidak dilemparkan apabila kaedah statik digunakan pada rujukan nol. Mari kita siasat sebabnya.

Definisi dan Akses Kaedah Statik

Kaedah statik dikaitkan dengan kelas, bukannya contoh tertentu. Ia boleh dipanggil terus menggunakan nama kelas, tanpa memerlukan rujukan objek.

Gelagat Tidak Dijangka

Kod contoh di bawah menggambarkan tingkah laku yang tidak dijangka:

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

  public static void test() {
    System.out.println("Passed");
  }

  public static void main(String[] args) {
    Why NULL = null;
    NULL.test(); // DOES NOT Throw NullPointerException
  }

}</code>
Salin selepas log masuk

Sebab Asas

Kunci untuk memahami sebab kod ini berfungsi terletak pada konsep akses ahli statik. Ahli statik, termasuk kaedah, tergolong dalam jenis dan tidak memerlukan contoh objek untuk diakses.

Seruan Kaedah Statik yang Betul

Kaedah statik hendaklah digunakan secara terus menggunakan nama kelas, seperti berikut:

<code class="java">Why.test(); // Correct way to invoke static method</code>
Salin selepas log masuk

Akses Bukan Statik melalui Rujukan Objek

Walaupun Java membenarkan mengakses ahli statik melalui rujukan objek, amalan ini sangat kuat berkecil hati. Ia boleh membawa kepada kekeliruan, kerana ia membayangkan mengakses ahli contoh, yang tidak betul.

Implikasi Akses Rujukan Objek

Apabila mengakses ahli statik melalui rujukan objek , perkara berikut berlaku:

  • Semakan rujukan nol dipintas, kerana ahli statik tidak memerlukan tika.
  • Jenis masa jalan tertentu objek (jika wujud) adalah tidak relevan , yang berbeza daripada akses ahli contoh.

Soalan Berkaitan

Memahami konsep ini juga menerangkan mengapa Java melarang penggantian kaedah statik dan mengapa memanggil kaedah statik melalui contoh bukan ralat untuk pengkompil Java.

Atas ialah kandungan terperinci Mengapa Tidak Menggunakan Kaedah Statik pada Rujukan Objek Null Membuang NullPointerException?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan