空引用上的靜態方法呼叫:為什麼令人驚訝
使用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 允許透過物件引用存取靜態成員,但強烈建議不要這樣做。它可能會導致混亂,因為它隱藏了靜態成員存取的實際語義。
靜態成員存取中的重要事項
透過物件引用存取靜態成員時表達式中,只有引用的宣告型別很重要。這表示:
相關注意事項
以上是為什麼在空引用上呼叫靜態方法不會引發 NullPointerException?的詳細內容。更多資訊請關注PHP中文網其他相關文章!