我用Java编写了这个程序
public class Why {
public static void test() {
System.out.println("Passed");
}
public static void main(String[] args) {
Why NULL = null;
NULL.test();
}
}
Run Code Online (Sandbox Code Playgroud)
我读到调用一个null对象的方法导致NullPointerException,但上面的程序没有?为什么是这样?我不正确地理解某事吗?
我刚刚与我的朋友讨论了使用类名调用静态方法,并尝试了这个代码并期望它在运行时抛出NPE.但事实证明它是dint.我只是想了解执行顺序.
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
}
}
Run Code Online (Sandbox Code Playgroud)
我知道静态方法应该用它们的类名调用,我甚至知道当我们用实例调用静态方法时IDE会给出编译器警告.但我们也可以通过创建一个实例来调用它们,但是,我从来没有在这里创建过一个实例,o应该得到它的默认值null,因此调用o.method()应该在运行时抛出一个NPE,但事实并非如此.你们能否详细说明这段代码中的执行顺序.