Если при закрытии одного из компонентов в блоке try-with-resources возникнет исключение, закроются ли остальные ресурсы автоматически?

В конструкции try-with-resources в Java все ресурсы, объявленные в скобках, автоматически закрываются в обратном порядке их объявления, даже если при закрытии одного из них возникает исключение.

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

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

В конструкции try-with-resources в Java все ресурсы, объявленные в скобках, автоматически закрываются в обратном порядке их объявления, даже если при закрытии одного из них возникает исключение.

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

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

В конструкции try-with-resources в Java все ресурсы, объявленные в скобках, автоматически закрываются в обратном порядке их объявления, даже если при закрытии одного из них возникает исключение.

Если при закрытии одного ресурса возникает исключение, JVM продолжит попытку закрыть остальные ресурсы. Исключения, возникшие при закрытии ресурсов после первого, будут добавлены как suppressed exceptions к первому исключению.

Пример:

try (Resource res1 = new Resource("res1");
     Resource res2 = new Resource("res2")) {
    // работа с ресурсами
}
// При выходе из блока оба ресурса будут закрыты,
// даже если при закрытии res1 возникнет исключение,
// res2 тоже будет закрыт.

Это обеспечивает надежное освобождение всех ресурсов, предотвращая утечки.

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

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

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

Подробнее