我刚和朋友讨论如何使用类名调用静态方法,尝试了这段代码,并期望它在运行时引发NPE。但实际上它没有。我只想理解执行顺序。
public class One {
public static void method() {
System.out.println("in static one");
}
}
public class Two {
static One o;
public static void main(String[] args) {
o.method(); // expected NPE here, as o is null
}
}
我知道静态方法应该使用它们的类名来调用,我甚至知道当我们使用实例调用静态方法时,IDE会给出编译器警告。但是,我们也可以通过创建实例来调用它们,然而,在这里我从未创建过实例,
o
应该得到它的默认值null,因此调用o.method()
应该在运行时抛出NPE,但实际上没有。你们能否解释一下这段代码的执行顺序呢?
o
应该是static
的。否则,您将无法从main
访问它。 - reprogrammer