11

重複の可能性:
null参照で(静的)メソッドを呼び出してもNullPointerExceptionがスローされないのはなぜですか?

次のプログラムの出力が「呼び出された」理由を誰かが説明できますか

public class Test4{

  public static void method(){
    System.out.println("Called");
  }

  public static void main(String[] args){
    Test4 t4 = null;
    t4.method();
  }
}

クラス参照を使用して静的メソッドを呼び出すことができることはわかっていますが、ここではnull参照を使用して呼び出しています。私の疑問を明確にしてください

4

3 に答える 3

15

バイトコード内

Test4 t4 = null;
t4.method();

になります

Test4 t4 = null;
Test4.method();

コンパイラは、静的メソッドのクラス名を使用して呼び出しを変換します。私自身が尋ねたSOに関するこの質問を参照してください。

于 2013-01-02T16:50:49.133 に答える
2

静的メソッドを呼び出しているため、インスタンスがnullであるかどうかは関係ありません。 このように考えてください。

すべての静的メソッドクラスメソッドと同等ですが、非静的メソッドインスタンスメソッドと同等です。

そのため、静的メソッドまたはメンバーを使用している限り、インスタンスがどのような値を取るかは重要ではありません。

于 2013-01-02T17:24:41.417 に答える
0

静的メソッドは、クラス名またはインスタンスを介して呼び出すことができます。私はそれらをインスタンスで呼び出さないようにします(また、多くのツールは悪い習慣のためにそうするように警告します)。

于 2013-01-02T16:52:32.413 に答える