Null オブジェクト参照で静的メソッドを呼び出すと NullPointerException がスローされないのはなぜですか?
Java では、メソッドを呼び出すと、 null オブジェクト参照では NullPointerException がトリガーされます。ただし、静的メソッドが null 参照で呼び出された場合、この例外はスローされません。その理由を調べてみましょう。
静的メソッドの定義とアクセス
静的メソッドは、特定のインスタンスではなく、クラスに関連付けられます。オブジェクト参照を必要とせず、クラス名を使用して直接呼び出すことができます。
予期しない動作
以下のコード例は、予期しない動作を示しています。
<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 にとってエラーにならない理由もわかります。コンパイラ。
以上がNull オブジェクト参照で静的メソッドを呼び出すと NullPointerException がスローされないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。