¿Por qué NoClassDefFoundError causado por un error de inicialización del campo estático?

Aquí hay una pregunta interesante de Java.

el siguiente programa simple de Java contiene un campo estático inicializado por un método estático. En realidad, forzo el método que calcula el valor intiailize para generar una NullPointException. Cuando accedo a un campo estático, se generará un NoClassDefFoundError. parece que la VM trata la clase no está completa.

Pero cuando accedo a la Clase, todavía está disponible;

¿Alguien sabe por qué?

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();
        }
    }   
}

Respuestas a la pregunta(4)

Su respuesta a la pregunta