ошибки инициализации Java статического внутреннего класса - PullRequest
4 голосов
/ 14 декабря 2010

Контекст: класс 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 при вызове во второй раз?Является ли исходное предположение неверным?

1 Ответ

7 голосов
/ 14 декабря 2010

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

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

...