Получить доступ

Что происходит, если исключение не перехвачено ни в одном методе цепочки вызовов?

JuniorИсключения и ресурсы
Ещё спрашивают так:
  • Что такое стектрейс и как его читать?
  • Где правильно перехватывать исключения?
  • Что такое UncaughtExceptionHandler?
Коротко

Исключение поднимается вверх по стеку вызовов до первого подходящего catch; если его нет — поток завершается со стектрейсом.

  • Завершается поток, а не обязательно всё приложение
  • Стектрейс — путь вызовов до ошибки, главный инструмент диагностики

А ещё Перехватывайте там, где можете что-то сделать; иначе пробрасывайте с контекстом

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Когда метод бросает исключение, выполнение прерывается, и JVM ищет обработчик: сначала в текущем методе, затем в вызвавшем и так далее вверх по стеку (раскрутка стека). По пути выполняются блоки finally и закрываются ресурсы try-with-resources.

Если до вершины стека потока обработчик не найден:

  • вызывается UncaughtExceptionHandler потока (по умолчанию печатает стектрейс в stderr);
  • поток завершается. Если это главный поток и других не-демон потоков нет — завершается и программа.

В серверных приложениях фреймворк ставит обработчик выше: исключение в обработке запроса превращается в ответ 500, а сервер продолжает работать. В пулах потоков исключение задачи попадает в Future и всплывает при get() — если результат никто не забирает, ошибка может пройти незамеченной.

Практические правила: ловить исключение там, где можно восстановиться или добавить смысл; не глотать (catch (Exception e) {}); при пробрасывании оборачивать с сохранением причины — new ServiceException("...", e).

Что хотят услышать

  • Раскрутка стека до подходящего обработчика.
  • Завершение потока и роль UncaughtExceptionHandler.
  • Поведение в серверах и пулах потоков.
  • Где и как правильно обрабатывать.

Частые ошибки

  • Писать пустой блок перехвата и терять информацию о сбое.
  • Логировать исключение и тут же пробрасывать его дальше, дублируя записи.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Оно поднимается вверх по стеку, и при отсутствии обработчика поток завершается с выводом стектрейса
  • ✗Программа продолжает работу со следующей строки
  • ✗Исключение автоматически подавляется средой выполнения
  • ✗Метод возвращает значение по умолчанию

Что спросят дальше

  • Чем контролируемые исключения отличаются от неконтролируемых?
  • Зачем при перехвате передавать исходную причину?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем