【发布时间】:2012-11-25 00:07:31
【问题描述】:
我刚刚和我的朋友讨论使用类名调用静态方法,并尝试了这段代码,并希望它在运行时抛出 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 哈哈,是的,编辑了它:)
标签: java static classloader static-methods