Если все три throw исполняются, наружу выйдет ThirdException. FirstException перехватывается catch; SecondException из catch будет вытеснено исключением из finally.
Поведение исключений: порядок выполнения блоков try‑catch‑finally
Если все три throw исполняются, наружу выйдет ThirdException. FirstException перехватывается catch; SecondException из catch будет вытеснено исключением из finally.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Какие типы исключений будут выброшены при запуске данного метода? В каком порядке отрабатывают секции catch и finally? Какие из исключений будут перехвачены, а какие подавятся? Необходимо провести рефакторинг кода.
void executeTask() {
try {
// ...
throw new FirstException();
} catch (FirstException ex1) {
// ...
throw new SecondException();
} finally {
// ...
throw new ThirdException();
}
}
Ответ
Если все три throw исполняются, наружу выйдет ThirdException. FirstException перехватывается catch; SecondException из catch будет вытеснено исключением из finally.
Обычный finally не добавляет вытесненные исключения в suppressed автоматически. При рефакторинге не бросайте безусловное исключение из блока очистки; исходную ошибку можно передать как cause при оборачивании. Если это работа с AutoCloseable, try-with-resources сохраняет основное исключение и добавляет ошибки close как suppressed. Объявления исключений в примере отсутствуют: для checked-типов дополнительно потребуется корректный throws или обработка.