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

Метод бросает исключение внутри try, а в блоке finally стоит return. Что получит вызывающий?

MiddleИсключения и ресурсы
Коротко

Нормальный возврат: return в finally перекрывает исходный выход и проглатывает исключение — сбой бесследно исчезает. Так же действуют break и continue.

  • return в finally перекрывает и return из try
  • Компиляторы и линтеры предупреждают: finally does not complete normally
  • finally — только для освобождения ресурсов

А ещё finally не выполнится при System.exit и убийстве процесса

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

Подробно

Блок finally выполняется при любом выходе из try, и если он сам завершается через return, break или continue, то этот выход перекрывает исходный — будь то возврат значения или брошенное исключение. Исключение при этом не логируется и нигде не всплывает: сбой просто исчезает. По той же причине return в finally перезаписывает значение, вычисленное в try. Правило простое: в finally размещают только освобождение ресурсов и не помещают ни return, ни throw. А для самого освобождения ресурсов сегодня используют try-with-resources, где ошибка закрытия корректно сохраняется как suppressed, а не затирает основную.

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

  • Результат и механизм.
  • Правило: не выходить из finally.

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

  • Ставить return в finally ради «единственной точки выхода».
  • Бросать исключение из finally и терять исходную причину.

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

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

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

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

  • Как try-with-resources решает ту же проблему правильно?
  • Что произойдёт при исключении и в try, и в finally?

Разбор темы

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

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

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

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

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