web-dev-qa-db-ja.com

javaで静的メソッドを呼び出す

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

次のプログラムの出力が「Called」である理由を誰かが説明できますか?

public class Test4{

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

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

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

11
Raj

バイトコードで

Test4 t4 = null;
t4.method();

になります

Test4 t4 = null;
Test4.method();

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

15
PermGenError

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

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

そのため、静的メソッドまたはメンバーで作業している限り、インスタンスがどのような値をとるかは問題ではありません。

2
Mihai M.

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

0
MrSmith42