「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Null 参照で静的メソッドを呼び出すと NullPointerException がスローされないのはなぜですか?

Null 参照で静的メソッドを呼び出すと NullPointerException がスローされないのはなぜですか?

2024 年 11 月 12 日に公開
ブラウズ:474

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

静的メソッドの呼び出しと Null 参照について

一般的な誤解に反して、null 参照で (静的) メソッドを呼び出しても、 NullPointerException。この動作を理解するには、Java の静的メソッドの概念を理解することが不可欠です。

静的メソッド: 共有リソース

非静的 (インスタンス) メソッドとは異なり、静的メソッドは特定のオブジェクト インスタンスに関連付けられ、静的メソッドはそれらが属するクラスにバインドされます。これらは型レベルで動作するため、オブジェクトにアクセスする必要はありません。

静的メソッドへのアクセス: 型式経由

静的メソッドを呼び出す適切な方法これは、Why.test() などの型式を使用することによって行われます。このアプローチにより、静的メソッドがオブジェクト インスタンスを介さずにクラスで直接呼び出されることになります。

落とし穴: オブジェクト参照式の使用

Java では静的メンバーへのアクセスが許可されていますが、オブジェクト参照式を使用する場合は、混乱を招く可能性があるため、これを行わないことを強くお勧めします。このアプローチ (Why aNull = null; aNull.test()) を使用する場合、宣言された参照の型 (Why) によって、呼び出される静的メソッドが決まります。

オブジェクト参照式の使用の影響

  • Null チェックは無視されます: オブジェクトは必要ないため、Null チェックは無視されます。参照 (aNull) は無関係です。
  • ランタイム型は無視されます: オブジェクトの実際のランタイム型 (null でない場合) は、静的メソッドのディスパッチに影響しません。

結論

混乱を避け、予測可能性を確保するには、常に型式を使用して静的メソッドを呼び出します。静的メンバーの性質とそのアクセス メカニズムを理解することは、正しく保守可能な Java コードを作成するために非常に重要です。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3