Определение последовательности вызовов close() в блоке try‑with‑resources

Ресурсы закрываются в обратном порядке объявления: сначала c, затем b, затем a. Это происходит и при исключении внутри try, если ресурсы были успешно созданы.

Короткий ответ

Что ответить на собеседовании

Ресурсы закрываются в обратном порядке объявления: сначала c, затем b, затем a. Это происходит и при исключении внутри try, если ресурсы были успешно созданы.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо выяснить, в каком порядке будет вызван метод close() для ресурсов, объявленных в конструкции try‑with‑resources. Рассмотрите следующий пример кода и укажите порядок закрытия:

try (R1 a = ...; R2 b = ...; R3 c = ...) {
    ...
}

Ответ

Ресурсы закрываются в обратном порядке объявления: сначала c, затем b, затем a. Это происходит и при исключении внутри try, если ресурсы были успешно созданы.

Если инициализация c упадёт, закроются только уже созданные b и a. Исключение из close не прекращает попытки закрыть остальные ресурсы. При основном исключении ошибки закрытия добавляются как suppressed; если основного нет, первая ошибка закрытия становится основной. Null-ресурс пропускается.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее