Ответ
Try-with-resources — это конструкция языка Java (появилась в Java 7), предназначенная для автоматического управления ресурсами, которые необходимо закрывать после использования. Ресурсом считается любой объект, реализующий интерфейс java.lang.AutoCloseable (или его предшественник java.io.Closeable).
Как работает:
Ресурсы, объявленные в скобках после try, автоматически закрываются при выходе из блока try (нормальном или исключительном). Компилятор гарантирует вызов метода .close() для каждого ресурса в порядке, обратном порядку их объявления.
Пример использования:
try (FileInputStream fis = new FileInputStream("file.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fis))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
// Здесь fis и br будут закрыты автоматически, даже если возникнет исключение.
Ключевые преимущества и особенности:
- Автоматическое закрытие: Избавляет от необходимости писать блок
finallyдля ручного закрытия, уменьшая шаблонный код и риск утечек ресурсов. - Подавление исключений: Если в блоке
tryи при закрытии ресурса (close()) возникли исключения, исключение из блокаtryдобавляется в подавленные (suppressed) исключения основного исключения, что позволяет не терять информацию об ошибках. - Объявление ресурсов: Ресурсы можно объявлять непосредственно в скобках
try(как в примере) или использовать уже существующие final/effectively final переменные (с Java 9). - Совместимость: Блоки
catchиfinallyостаются опциональными и работают как обычно.