Ответ
Да, все объявленные ресурсы будут закрыты.
Механизм Try-With-Resources гарантирует попытку закрытия каждого ресурса в порядке, обратном их инициализации.
Поведение при исключениях:
- Если исключение возникает в теле блока
try, ресурсы закрываются, а это исключение становится основным. - Если исключение возникает при закрытии ресурса, оно подавляется (added as a suppressed exception). Основным остаётся первое возникшее исключение.
Пример:
try (var in = new FileInputStream("source.txt");
var out = new FileOutputStream("dest.txt")) {
// ... операции чтения/записи
} catch (IOException e) {
// e - основное исключение (например, из тела try)
Throwable[] suppressed = e.getSuppressed(); // Массив подавленных исключений (например, от close())
}
Практический вывод: Используйте Try-With-Resources для автоматического и безопасного управления ресурсами, даже в случае ошибок.