首頁 > Java > java教程 > 主體

為什麼對空物件參考呼叫靜態方法不會引發 NullPointerException?

DDD
發布: 2024-11-03 03:57:30
原創
782 人瀏覽過

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

為什麼在空物件參考上呼叫靜態方法不會拋出 NullPointerException?

在 Java 中,通常理解為呼叫方法空物件參考會觸發 NullPointerException。但是,當對空引用呼叫靜態方法時,不會引發此異常。讓我們研究一下原因。

靜態方法定義和存取

靜態方法與類別關聯,而不是與特定實例關聯。可以直接使用類別名稱調用,無需物件引用。

意外行為

下面的範例程式碼說明了意外行為:

<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>
登入後複製

根本原因

根本原因

理解這段程式碼運作原理的關鍵在於靜態成員存取的概念。靜態成員(包括方法)屬於類型,不需要存取物件實例。

靜態方法的正確呼叫
<code class="java">Why.test(); // Correct way to invoke static method</code>
登入後複製

靜態方法應直接呼叫使用類別名,如下所示:

透過物件引用進行非靜態存取

雖然Java 允許透過物件引用存取靜態成員,但這種做法強烈灰心。它可能會導致混亂,因為它意味著存取實例成員,這是不正確的。

物件引用存取的意義
  • 透過物件引用存取靜態成員時,會發生以下情況:
空引用檢查被繞過,因為靜態成員不需要實例。

物件的特定執行時間類型(如果存在)無關緊要,這與實例成員存取不同。

相關問題理解這個概念也說明了為什麼Java 禁止重寫靜態方法以及為什麼透過以下方式呼叫靜態方法對於Java 編譯器來說,實例不是錯誤。

以上是為什麼對空物件參考呼叫靜態方法不會引發 NullPointerException?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板