Вот интересный вопрос на 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();
}
}
}