Когда Java выдает ошибку ExceptionInInitializerError?
В этом кратком руководстве мы увидим, что заставляет Java создавать экземпляр исключения ExceptionInInitializerError .
Начнем с небольшого количества теории. Затем мы увидим несколько примеров этого исключения на практике.
2. Ошибка ExceptionInInitializer
ExceptionInInitializerError указывает , что в статическом инициализаторе возникло непредвиденное исключение . По сути, когда мы видим это исключение, мы должны знать, что Java не удалось оценить блок статического инициализатора или создать экземпляр статической переменной.
Фактически каждый раз, когда внутри статического инициализатора возникает какое-либо исключение, Java автоматически заключает это исключение в экземпляр класса ExceptionInInitializerError . Таким образом, он также поддерживает ссылку на фактическое исключение как на основную причину.
Теперь, когда мы знаем причину этого исключения, давайте посмотрим на это на практике.
3. Статический блок инициализатора
Чтобы инициализатор статического блока вышел из строя, мы намеренно разделим целое число на ноль:
public class StaticBlock private static int state; static state = 42 / 0; > >
Теперь, если мы вызовем инициализацию класса чем-то вроде:
new StaticBlock();
Java: Исправлена потеря исходного ExceptionInInitializerError в NoClassDefFoundError
В последнем (на момент написания) релизе Java исправлена очень давняя и неприятная ошибка потери исходного исключения при загрузке класса. Теперь понять, почему класс не загрузился станет легче!
Исправление доступно в релизах
Описание по ссылке:
Кажется, хороший повод провести апгрейд минорной версии JVM!
Почитать что еще исправлено, например, в 11.0.19 можно вот тут:
Exception InInitializer Error Конструкторы
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Перегрузки
ExceptionInInitializerError Создает объект с null в качестве строки подробных сообщений и без сохраненного вызываемого объекта.
Создает новый ExceptionInInitializerError класс, сохраняя ссылку на объект, создаваемый Throwable для последующего извлечения методом #getException() .
Создает объект ExceptionInInitializerError с указанной строкой подробного сообщения.
Конструктор, используемый при создании управляемых представлений объектов JNI; вызывается средой выполнения.
ExceptionInInitializerError()
ExceptionInInitializerError Создает объект с null в качестве строки подробных сообщений и без сохраненного вызываемого объекта.
[Android.Runtime.Register(".ctor", "()V", "")] public ExceptionInInitializerError ();
Комментарии
ExceptionInInitializerError Создает объект с null в качестве строки подробных сообщений и без сохраненного вызываемого объекта. Подробное сообщение — это строка, описывающая это конкретное исключение.
Части этой страницы являются изменениями, основанными на работе, созданной и совместно используемой проектом Android и используемой в соответствии с условиями, Creative Commons 2.5 Attribution License.
Exception InInitializer Error Класс
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Сигнализирует о том, что в статичном инициализаторе произошло непредвиденное исключение.
[Android.Runtime.Register("java/lang/ExceptionInInitializerError", DoNotGenerateAcw=true)] public class ExceptionInInitializerError : Java.Lang.LinkageError
[] type ExceptionInInitializerError = class inherit LinkageError
Наследование
ExceptionInInitializerError
Комментарии
Сигнализирует о том, что в статичном инициализаторе произошло непредвиденное исключение. Возникает ExceptionInInitializerError исключение, указывающее, что во время вычисления статического инициализатора или инициализатора для статической переменной произошло исключение.
В выпуске 1.4 это исключение было обновлено в соответствии с механизмом цепочки исключений общего назначения. Сохраненный бросаемый объект, который может быть предоставлен во время создания и доступ к которому осуществляется с помощью #getException() метода , теперь называется причиной и может быть доступен с помощью метода , а также с помощью Throwable#getCause() упомянутого выше «устаревшего метода».
Добавлено в версии 1.1.
Части этой страницы являются изменениями, основанными на работе, созданной и совместно используемой проектом Android и используемой в соответствии с условиями, Creative Commons 2.5 Attribution License.
Конструкторы
ExceptionInInitializerError Создает объект с null в качестве строки подробных сообщений и без сохраненного вызываемого объекта.
Конструктор, используемый при создании управляемых представлений объектов JNI; вызывается средой выполнения.
Создает объект ExceptionInInitializerError с указанной строкой подробного сообщения.
Создает новый ExceptionInInitializerError класс, сохраняя ссылку на объект, создаваемый Throwable для последующего извлечения методом #getException() .
Поля
Сигнализирует о том, что в статичном инициализаторе произошло непредвиденное исключение.
Свойства
Возвращает причину этого вызываемого объекта или null значение , если причина не существует или неизвестна.
Сигнализирует о том, что в статичном инициализаторе произошло непредвиденное исключение.
Возвращает исключение, возникшее во время статической инициализации, вызвавшей эту ошибку.
Дескриптор базового экземпляра Android.
Сигнализирует о том, что в статичном инициализаторе произошло непредвиденное исключение.
Сигнализирует о том, что в статичном инициализаторе произошло непредвиденное исключение.
Создает локализованное описание этого вызываемого объекта.
Возвращает строку подробного сообщения этого вызываемого объекта.
Сигнализирует о том, что в статичном инициализаторе произошло непредвиденное исключение.
Сигнализирует о том, что в статичном инициализаторе произошло непредвиденное исключение.
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.
Методы
Добавляет указанное исключение к исключениям, которые были подавлены для доставки этого исключения.
Сигнализирует о том, что в статичном инициализаторе произошло непредвиденное исключение.
Сигнализирует о том, что в статичном инициализаторе произошло непредвиденное исключение.
Заполняет трассировку стека выполнения.
Предоставляет программный доступ к сведениям трассировки стека, напечатанным . #printStackTrace()
Возвращает массив, содержащий все исключения, которые были подавлены, как правило, инструкцией try -with-resources, для доставки этого исключения.
Инициализирует причину этого вызываемого объекта указанным значением.
Выводит этот вызываемый объект и его обратную передачу в стандартный поток ошибок.
Выводит этот бросаемый объект и его обратную передачу в указанный поток печати.
Выводит этот бросаемый объект и его обратную сторону в указанный модуль записи печати.
Задает элементы трассировки стека, которые будут возвращены #getStackTrace() и напечатаны связанными методами #printStackTrace() и .
Сигнализирует о том, что в статичном инициализаторе произошло непредвиденное исключение.
Сигнализирует о том, что в статичном инициализаторе произошло непредвиденное исключение.
Явные реализации интерфейса
Сигнализирует о том, что в статичном инициализаторе произошло непредвиденное исключение.
Сигнализирует о том, что в статичном инициализаторе произошло непредвиденное исключение.
Сигнализирует о том, что в статичном инициализаторе произошло непредвиденное исключение.
Сигнализирует о том, что в статичном инициализаторе произошло непредвиденное исключение.
Сигнализирует о том, что в статичном инициализаторе произошло непредвиденное исключение.
Сигнализирует о том, что в статичном инициализаторе произошло непредвиденное исключение.
Сигнализирует о том, что в статичном инициализаторе произошло непредвиденное исключение.
Методы расширения
Выполняет преобразование типа, проверенного средой выполнения Android.
Сигнализирует о том, что в статичном инициализаторе произошло непредвиденное исключение.
Сигнализирует о том, что в статичном инициализаторе произошло непредвиденное исключение.