2013-01-02 20 views
8

可能性の重複:次のプログラムの出力はJavaで静的メソッドを呼び出す

public class Test4{ 

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

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

"いわゆる" をある理由
How come invoking a (static) method on a null reference doesn’t throw NullPointerException?

は、いずれかが説明することができますクラス参照で静的メソッドを呼び出すことはできますが、h私はヌルリファレンスを使用して呼び出していますか?

Test4 t4 = null; 
t4.method(); 

バイト・コードでは、私の疑問

答えて

13

を明確にしてくださいすることは

Test4 t4 = null; 
Test4.method(); 

コンパイラは、静的メソッドのクラス名を指定して電話を変換しますになります。私は自分自身でこれを尋ねたので、このquestionを参照してください。

0

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

2

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

すべて静的メソッドクラスメソッドと等価です。

したがって、静的メソッドまたはメンバを使用している限り、インスタンスにかかる値は重要ではありません。

関連する問題