Вопрос с собеседования · Java
Какой порядок catch-блоков корректен для FileNotFoundException и IOException?
JuniorИсключения и ресурсы
Коротко
Сначала FileNotFoundException, затем IOException: catch проверяются сверху вниз, и общий тип перед частным делает частный недостижимым — ошибка компиляции.
- FileNotFoundException наследует IOException
- Multi-catch: catch (IOException | SQLException e), типы не должны быть родственными
- Ловить частный тип стоит, только если реакция отличается
А ещё Порядок в multi-catch неважен
Подробно
catch проверяются сверху вниз. Если поставить IOException первым, catch для FileNotFoundException станет недостижимым, потому что FileNotFoundException наследуется от IOException.
Что хотят услышать
- Правильный порядок и почему.
Частые ошибки
- Ставить общий тип исключения раньше частного.
- Думать, что выполнятся оба catch-блока.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Сначала IOException, затем FileNotFoundException
- ✗Порядок не важен — JVM сама выберет самый точный catch
- ✓Сначала FileNotFoundException, затем IOException
- ✗Оба исключения нельзя ловить в одном try
Что спросят дальше
- Как работает multi-catch?
- Когда finally не выполнится?
Разбор темы
- Исключения: иерархия и checked/unchecked
Дерево Throwable, философия checked против unchecked, раскрутка стека и стоимость, цепочки причин и практики обработки.
Связанные вопросы
Партнёр платформы
Разбор собеседования
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.