2013-01-02 58 views
8

可能重复:
How come invoking a (static) method on a null reference doesn’t throw NullPointerException?调用静态方法在Java中

任何一个可以解释为什么以下程序的输出为 “

public class Test4{ 

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

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

我知道我们可以用类引用调用静态方法,但是h在我使用空引用调用之前。请澄清我的疑问

回答

13

在字节码

Test4 t4 = null; 
t4.method(); 

Test4 t4 = null; 
Test4.method(); 

编译器将调用转换与类名的静态方法。请参考我自己问过的SO这个question

0

可以通过类名或实例调用静态方法。 我会尽量避免由实例调用它们(由于不好的做法,很多工具都会警告您这么做)。

2

如果实例为空,则无关紧要,因为您正在调用一个静态方法。 想想这样。

静态方法相当于与类方法非静态方法相当于与 一个实例方法

因此,只要您正在使用静态方法或成员,则实例需要的值才是重要的。