ホームページ >Java >&#&チュートリアル >Null 参照で静的メソッドを呼び出すと NullPointerException がスローされないのはなぜですか?
Null 参照での静的メソッド呼び出し: 驚く理由
Java を使用する場合、一般的に、Null 参照でメソッドを呼び出すというルールに遭遇します。 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 参照で静的メソッドを呼び出すと NullPointerException がスローされないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。