Выбор ответа Middle Исключения обновлено
Исключение в finally
Вопрос
Что получит вызывающий код?
try {
throw new RuntimeException("try");
} finally {
throw new IllegalStateException("finally");
}
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: IllegalStateException("finally"), исходное исключение потеряно. Исключение, брошенное в finally, заменяет то, которое летело из try.
Варианты ответа
RuntimeException("try"), а finally молча пропуститсяRuntimeException("try")с suppressedIllegalStateException- Оба исключения по очереди: сначала из try, потом из finally
IllegalStateException("finally"), исходное исключение потеряноправильный ответ
Разбор
Исключение, брошенное в finally, заменяет то, которое летело из try. Исходное теряется без следа: suppressed добавляет только try-with-resources. Поэтому в finally код пишут так, чтобы он не бросал, или используют try-with-resources.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.