Ошибки инициализации статического внутреннего класса Java

Контекст: класс java.io.File имеет статический метод внутреннего класса следующим образом:

    LazyInitialization.temporaryDirectory();

[ОТРЕДАКТИРОВАНО, чтобы добавить еще немного кода] Мой код ниже в конечном итоге вызывает указанную выше строку кода. Исключение выдается из метода временного каталога (), что в моем контексте нормально/ожидается.

try {
    File tempFile = File.createTempFile("aaa", "aaa");
} catch (Exception e) {
    // handle exception 
}

Затем, когда я снова вызываю тот же метод (createTempFile), я получаю «ошибка java.lang.NoClassDefFound — не удалось инициализировать класс java.io.File$LazyInitialization».

Вопрос: Я предположил, что внутренний класс LazyInitialization должен был быть загружен загрузчиком класса при вызове его статического метода, хотя внутренний метод выдал исключение. Тем не менее, почему я вижу ошибку NoClassDefFound при повторном вызове? Верно ли исходное предположение?


person crazy horse    schedule 13.12.2010    source источник
comment
Я думаю, что это должно работать. Покажи нам свой код.   -  person thejh    schedule 14.12.2010


Ответы (1)


Когда статический код инициализации создает исключение времени выполнения, он оборачивается ExceptionInInitializerError и выдается в контексте кода, запускающего загрузку класса (если это исключение Error, оно не обертывается). На данный момент класс не загружается. Поэтому любая попытка использовать его позже вызовет ошибку NoClassDefFoundError.

Возможно, это то, что вы испытываете.

person Eyal Schneider    schedule 13.12.2010