
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.