首頁 > Java > java教程 > 為什麼在空引用上呼叫靜態方法不會引發 NullPointerException?

為什麼在空引用上呼叫靜態方法不會引發 NullPointerException?

Mary-Kate Olsen
發布: 2024-11-04 04:29:01
原創
423 人瀏覽過

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

空引用上的靜態方法呼叫:為什麼令人驚訝

使用Java 時,通常會遇到這樣的規則:在空引用上呼叫方法null 參考會觸發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(); // Doesn't throw NullPointerException
  }

}</code>
登入後複製

令我們驚訝的是,上面的程式並沒有拋出 NullPointerException。為什麼會這樣呢?

理解靜態方法

理解這種行為的關鍵在於靜態方法的本質。靜態成員(包括方法)屬於類,而不屬於特定實例。可以透過類型名稱直接存取它們,而不需要物件參考。

在上面的範例中,test() 是一個靜態方法。當使用 NULL.test() 呼叫它時,Java 會將其視為呼叫 Why.test(),因為實際的物件參考不相關。

透過物件參考進行靜態存取(避免!)

雖然 Java 允許透過物件引用存取靜態成員,但強烈建議不要這樣做。它可能會導致混亂,因為它隱藏了靜態成員存取的實際語義。

靜態成員存取中的重要事項

透過物件引用存取靜態成員時表達式中,只有引用的宣告型別很重要。這表示:

  • 引用為 null 不會引發異常,因為不需要實例。
  • 物件的運行時類型不會影響呼叫;不會發生動態調度。

相關注意事項

  • Java 不允許重寫靜態方法,因為它們綁定到類,而不是實例。
  • 為了清楚起見並防止潛在的誤解,應避免透過實例引用存取靜態成員。

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

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