【问题标题】:calling static method in java [duplicate]在java中调用静态方法[重复]
【发布时间】:2013-01-02 16:49:47
【问题描述】:

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

谁能解释一下为什么下面程序的输出是“Called

public class Test4{

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

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

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

【问题讨论】:

    标签: java static-methods


    【解决方案1】:

    在字节码中

    Test4 t4 = null;
    t4.method();
    

    将会

    Test4 t4 = null;
    Test4.method();
    

    编译器会将调用转换为静态方法的类名。请参阅我本人问过的关于 SO 的 question

    【讨论】:

      【解决方案2】:

      实例是否为空无关紧要,因为您正在调用静态方法。 这样想吧。

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

      因此,只要您使用静态方法或成员,实例所取的值并不重要。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2011-01-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-10-13
          • 2018-10-10
          • 1970-01-01
          相关资源
          最近更新 更多