任何人都可以解释为什么以下程序的输出是“调用”
public class Test4{
public static void method(){
System.out.println("Called");
}
public static void main(String[] args){
Test4 t4 = null;
t4.method();
}
}
我知道我们可以使用类引用调用静态方法,但在这里我使用空引用调用。请澄清我的疑问
任何人都可以解释为什么以下程序的输出是“调用”
public class Test4{
public static void method(){
System.out.println("Called");
}
public static void main(String[] args){
Test4 t4 = null;
t4.method();
}
}
我知道我们可以使用类引用调用静态方法,但在这里我使用空引用调用。请澄清我的疑问
在字节码中
Test4 t4 = null;
t4.method();
将会
Test4 t4 = null;
Test4.method();
编译器会将调用转换为静态方法的类名。请参阅我自己问过的关于 SO的这个问题。
实例是否为空无关紧要,因为您正在调用静态方法。 这样想吧。
每个静态方法都等价于类方法,而非静态方法等价于实例方法。
因此,只要您使用静态方法或成员,实例所需的值并不重要。
静态方法可以通过类名或实例调用。我会尽量避免通过实例调用它们(由于不良做法,许多工具也会警告您这样做)。