Выбор ответа Middle Исключения обновлено
Исключение в close
Вопрос
В try-with-resources тело бросило IllegalStateException, а close() бросил IOException. Что получит внешний код?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: IllegalStateException, а IOException будет в getSuppressed(). try-with-resources сохраняет основное исключение из тела и прикрепляет исключения закрытия как suppressed (Throwable.addSuppressed).
Варианты ответа
IllegalStateException, аIOExceptionбудет вgetSuppressed()правильный ответIOException: оно брошено последним и затирает исключение из тела- Оба исключения подряд: сначала из тела, потом из
close() IOException, обёрнутое вIllegalStateExceptionкак cause
Разбор
try-with-resources сохраняет основное исключение из тела и прикрепляет исключения закрытия как suppressed (Throwable.addSuppressed). Ручной finally вёл бы себя иначе: исключение из close затёрло бы основное. Бросить два исключения сразу невозможно. Cause тут не используется, suppressed это отдельный механизм.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.