在java中调用静态方法

时间:2013-01-02 16:49:48

标签: java static-methods

  

可能重复:
  How come invoking a (static) method on a null reference doesn’t throw NullPointerException?

任何人都可以解释为什么以下程序的输出是“被叫

public class Test4{

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

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

我知道我们可以使用类引用调用静态方法,但在这里我使用null引用调用。请澄清我的疑问

3 个答案:

答案 0 :(得分:15)

在字节代码中

Test4 t4 = null;
t4.method();

将是

Test4 t4 = null;
Test4.method();

编译器会使用静态方法的类名转换调用。请参考我自己提出的问题question

答案 1 :(得分:2)

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

每个静态方法等同于类方法,而非静态方法等同于 实例方法

因此,只要您使用静态方法或成员,实例所需的值无关紧要。

答案 2 :(得分:0)

可以通过classname或实例调用静态方法。 我会尽量避免通过实例调用它们(也有很多工具警告你这样做是因为不好的做法)。