Найти в Дзене
DEBAGanov

Java. Какое исключение выбрасывается при возникновении ошибки в блоке инициализации класса?

Если возникшее исключение - наследник RuntimeException:

  • для статических блоков инициализации будет выброшено java.lang.ExceptionInInitializerError;
  • для нестатических будет проброшено исключение-источник.

Если возникшее исключение - наследник Error, то в обоих случаях будет выброшено java.lang.Error. Исключение: java.lang.ThreadDeath - смерть потока. В этом случае никакое исключение выброшено не будет.

При возникновении ошибки в блоке инициализации класса в Java является ExceptionInInitializerError. Это исключение обычно возникает, когда происходит ошибка в статической инициализации класса, например, при необработанном исключении в блоке static { } или при ошибке в статическом инициализаторе переменной.

Пример:

public class MyClass {
static {
// Исключение в этом блоке инициализации класса
throw new RuntimeException("Ошибка в статической инициализации класса");
}
}

В этом примере, если мы попытаемся создать экземпляр класса MyClass, то будет выброшено исключение ExceptionInInitializerError.

Примечание: ExceptionInInitializerError оборачивает исключение, которое привело к ошибке в инициализации класса, поэтому вызов e.getCause() можно использовать для получения исходного исключения.

Github: https://github.com/DEBAGanov