Если возникшее исключение - наследник 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