Ответ
Try-with-resources — это конструкция в Java (появилась в Java 7), которая автоматически закрывает ресурсы, реализующие интерфейсы AutoCloseable или Closeable. Это избавляет от необходимости писать блок finally для ручного вызова close().
Синтаксис и пример:
// Ресурсы объявляются в круглых скобках после try
// Они будут автоматически закрыты после выхода из блока try
try (FileReader reader = new FileReader("data.txt");
BufferedReader br = new BufferedReader(reader)) {
// Работа с ресурсами
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) { // Исключения при работе с ресурсами или в блоке try
System.err.println("Error reading file: " + e.getMessage());
}
// Здесь reader и br уже закрыты, даже если было исключение
Ключевые преимущества:
- Автоматическое управление ресурсами: Компилятор гарантированно вставит вызов
close(). - Подавление исключений: Если в блоке
tryи в методеclose()возникли исключения, исключение из блокаtryне будет "проглочено". Исключение изclose()добавляется как подавленное (Suppressed Exception), и его можно получить черезThrowable.getSuppressed(). - Краткость и безопасность: Код становится чище и менее подвержен ошибкам "утечки" ресурсов.
Важное условие: Класс ресурса должен реализовывать AutoCloseable. Все стандартные классы для работы с IO, JDBC (Connection, Statement, ResultSet) и другими ресурсами уже его реализуют.