我只是在和我的朋友讨论使用类名调用静态方法并尝试了这段代码,并希望它在运行时抛出 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,但事实并非如此。你们能否解释一下这段代码中的执行顺序。