ExceptionInInitializerError

ExceptionInInitializerError

Когда статический член класса выбрасывает какой-либо runtime exception, Java-машина, перехватив его, выбрасывает ExceptionInInitializerError.
Runtime exception может возникнуть при следующих событиях:
1. Выполнение анонимного статического блока
2. Инициализация статической переменной
3. Выполнение статического метода


// Выполнение анонимного статического блока
static {
     int a = Integer.parseInt("sd", 16);
}
В этом примере выбрасывается NumberFormatException. Однако, когда Java-машина пытается загрузить этот класс, она выбрасывает ExceptionInInitializerError.


// Инициализация статической переменной
static String s = null;
static int len = s.length();
Здесь выбрасывается NullPointerException, а при его загрузке Java-машина выбросит ExceptionInInitializerError.

Статический метод может быть вызван статическим блоком или для инициализации статической переменной. В следующем примере Java-машина тоже выбросит ExceptionInInitializerError.


class MyException extends RuntimeException {}


static int len = getLen();
    
static int getLen() {
    throw new MyException();
}
ExceptionInInitializerError выбрасывается только если возник runtime exception, а не checked-исключение или Error.
Исключения