Метод бросает исключение внутри try, а в блоке finally стоит return. Что получит вызывающий?
Нормальный возврат: return в finally перекрывает исходный выход и проглатывает исключение — сбой бесследно исчезает. Так же действуют break и continue.
- return в finally перекрывает и return из try
- Компиляторы и линтеры предупреждают: finally does not complete normally
- finally — только для освобождения ресурсов
А ещё finally не выполнится при System.exit и убийстве процесса
Подробно
Блок finally выполняется при любом выходе из try, и если он сам завершается через return, break или continue, то этот выход перекрывает исходный — будь то возврат значения или брошенное исключение. Исключение при этом не логируется и нигде не всплывает: сбой просто исчезает. По той же причине return в finally перезаписывает значение, вычисленное в try. Правило простое: в finally размещают только освобождение ресурсов и не помещают ни return, ни throw. А для самого освобождения ресурсов сегодня используют try-with-resources, где ошибка закрытия корректно сохраняется как suppressed, а не затирает основную.
Что хотят услышать
- Результат и механизм.
- Правило: не выходить из finally.
Частые ошибки
- Ставить return в finally ради «единственной точки выхода».
- Бросать исключение из finally и терять исходную причину.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Исключение: finally выполнится, но не может отменить его распространение
- ✓Обычный возврат: return в finally глушит исключение
- ✗Ошибку компиляции: return в finally запрещён
- ✗Исключение будет доставлено после выполнения return
Что спросят дальше
- Как try-with-resources решает ту же проблему правильно?
- Что произойдёт при исключении и в try, и в finally?
Разбор темы
- Исключения: иерархия и checked/unchecked
Дерево Throwable, философия checked против unchecked, раскрутка стека и стоимость, цепочки причин и практики обработки.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.