Что происходит, если исключение не перехвачено ни в одном методе цепочки вызовов?
- Что такое стектрейс и как его читать?
- Где правильно перехватывать исключения?
- Что такое UncaughtExceptionHandler?
Исключение поднимается вверх по стеку вызовов до первого подходящего catch; если его нет — поток завершается со стектрейсом.
- Завершается поток, а не обязательно всё приложение
- Стектрейс — путь вызовов до ошибки, главный инструмент диагностики
А ещё Перехватывайте там, где можете что-то сделать; иначе пробрасывайте с контекстом
Подробно
Когда метод бросает исключение, выполнение прерывается, и JVM ищет обработчик: сначала в текущем методе, затем в вызвавшем и так далее вверх по стеку (раскрутка стека). По пути выполняются блоки finally и закрываются ресурсы try-with-resources.
Если до вершины стека потока обработчик не найден:
- вызывается
UncaughtExceptionHandlerпотока (по умолчанию печатает стектрейс в stderr); - поток завершается. Если это главный поток и других не-демон потоков нет — завершается и программа.
В серверных приложениях фреймворк ставит обработчик выше: исключение в обработке запроса превращается в ответ 500, а сервер продолжает работать. В пулах потоков исключение задачи попадает в Future и всплывает при get() — если результат никто не забирает, ошибка может пройти незамеченной.
Практические правила: ловить исключение там, где можно восстановиться или добавить смысл; не глотать (catch (Exception e) {}); при пробрасывании оборачивать с сохранением причины — new ServiceException("...", e).
Что хотят услышать
- Раскрутка стека до подходящего обработчика.
- Завершение потока и роль UncaughtExceptionHandler.
- Поведение в серверах и пулах потоков.
- Где и как правильно обрабатывать.
Частые ошибки
- Писать пустой блок перехвата и терять информацию о сбое.
- Логировать исключение и тут же пробрасывать его дальше, дублируя записи.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓Оно всплывает по стеку и завершает поток со стектрейсом
- ✗Исключение автоматически подавляется средой выполнения и пишется в лог
- ✗Программа продолжает работу со следующей строки
- ✗Метод возвращает значение по умолчанию
Что спросят дальше
- Чем контролируемые исключения отличаются от неконтролируемых?
- Зачем при перехвате передавать исходную причину?
Разбор темы
- Исключения: иерархия и checked/unchecked
Дерево Throwable, философия checked против unchecked, раскрутка стека и стоимость, цепочки причин и практики обработки.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.