Выбор ответа Junior Исключения обновлено
Порядок catch
Вопрос
Почему не скомпилируется этот код?
try {
read();
} catch (IOException e) {
log(e);
} catch (FileNotFoundException e) {
create();
}
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Второй catch недостижим: IOException уже пойман в первом. FileNotFoundException наследник IOException.
Варианты ответа
- Нельзя ловить IOException без throws в методе
- Второй catch недостижим: IOException уже пойман в первомправильный ответ
- FileNotFoundException нельзя ловить отдельно от IOException
- catch-блоки должны быть отсортированы по алфавиту
Разбор
FileNotFoundException наследник IOException. Широкий catch идёт первым и перехватывает всё, второй блок никогда не выполнится, компилятор считает это ошибкой. Узкие исключения ставят выше широких. Ловить IOException без throws можно, наоборот, catch его и обрабатывает.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.