Ресурсы закрываются в обратном порядке объявления: сначала c, затем b, затем a. Это происходит и при исключении внутри try, если ресурсы были успешно созданы.
Определение последовательности вызовов close() в блоке try‑with‑resources
Ресурсы закрываются в обратном порядке объявления: сначала 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-ресурс пропускается.