为什么 NoClassDefFoundError 会导致静态字段初始化失败?
这是一个有趣的java问题。
以下简单的java程序包含由静态方法初始化的静态字段。实际上,我强制计算 intiailize 值的方法引发 NullPointException,当我访问这样的静态字段时,将引发 NoClassDefFoundError。似乎VM处理类不完整。
但是当我访问类时,它仍然可用;
有谁知道为什么吗?
class TestClass {
public static TestClass instance = init();
public static TestClass init() {
String a = null;
a.charAt(0); //force a null point exception;
return new TestClass();
}
}
class MainClass {
static public void main(String[] args) {
accessStatic(); // a ExceptionInInitializerError raised cause by NullPointer
accessStatic(); //now a NoClassDefFoundError occurs;
// But the class of TestClass is still available; why?
System.out.println("TestClass.class=" + TestClass.class);
}
static void accessStatic() {
TestClass a;
try {
a = TestClass.instance;
} catch(Throwable e) {
e.printStackTrace();
}
}
}