Для тех, кому лень читать про ошибки из задания «Статики и исключения»:
1. Ошибка «initializer must be able to complete normally». Появляется, когда компилятор видит, что все пути в static-блоке инициализации заканчиваются throw или бесконечным циклом. Он считает, что блок не может завершиться нормально, и это ошибка.
static {
throw new RuntimeException();
/*
Exception возникает всегда → error:
initializer must be able to complete normally
*/
}
То же самое произойдёт с пустым бесконечным циклом:
static {
while (true) {}
/*
Тоже error: initializer must
be able to complete normally
*/
}
2. Ошибка «unreachable statement». Возникает, если после точки, из которой управление не может продолжиться, стоит ещё какой-то код — он становится недостижимым. Компилятор это видит и сообщает: «Бро, зачем ты инициализировал переменную после Exception?»
static {
throw new RuntimeException();
int x = 5; // Недостижимо → error: unreachable statement
}
3. Как бросить исключение внутри static-блока? Выявил два основных способа:
• Использовать условие if:
static {
if (Math.random() < 0.5) { // Можно просто использовать if(true)
throw new RuntimeException();
}
// Формально можно сюда попасть → Ошибок нет
}
Человечеству потребовалось пройти путь в несколько миллионов лет, чтобы обрести прямохождение, а квадроберам нужен всего месяц, чтобы вернуться обратно. Впрочем, пара бутылок водки помогает сделать это за один час.
По моему совсем уже странно было бы сдаться на таком высоком уровне. Если человек оказался здесь, значит он уже прошел через лямбды, файл ридеры и прочее, так что тут он уже вряд ли позволит себе сдаться :)
Я , конечно, понимаю, что я сейчас буду подвергнут резкой критике. НО вот задачу про "Статики и исключения" решил практически за меня IJ. Там не очень понятное условие , и я соответственно начал выполнять так, как я его понял, прочитав лекцию. Понятно, что там появились красные метки, нажав на которые, IJ поправил все за меня и.. программа заработала.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ