Ответ
Try-with-resources — это конструкция, предназначенная для автоматического и безопасного управления ресурсами, которые необходимо закрывать после использования (например, потоки ввода-вывода, соединения с БД). Она гарантирует вызов метода close() для каждого объявленного ресурса.
Как работает:
Ресурсы, объявленные в круглых скобках после try, должны реализовывать интерфейс AutoCloseable. JVM автоматически закроет их в обратном порядке объявления по завершении блока try, даже если в нем произошло исключение.
Пример использования с файлом:
try (FileInputStream fis = new FileInputStream("input.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fis))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) { // Ловятся исключения как из блока try, так и из close()
e.printStackTrace();
}
// fis.close() и br.close() вызываются автоматически здесь
Ключевые преимущества перед try-catch-finally:
- Краткость и читаемость: Нет необходимости вручную писать блок
finallyдля закрытия. - Надежность: Гарантированное закрытие всех ресурсов.
- Подавление исключений: Если исключения выбрасываются и в блоке
try, и при закрытии (close()), исключение изtryне "теряется", а исключение изclose()добавляется как подавленное (доступно черезThrowable.getSuppressed()).
Типичные ресурсы: InputStream, OutputStream, Connection, Statement, ResultSet, Socket.