Ответ
В Java ресурс в try-with-resources — это любой объект, который должен быть закрыт после использования и реализует интерфейсы java.lang.AutoCloseable или java.io.Closeable.
Принцип работы: Конструкция автоматически вызывает метод close() для каждого объявленного ресурса по завершении блока try (даже при возникновении исключения).
Пример объявления ресурсов:
import java.io.*;
public class Example {
public static void main(String[] args) {
// Объявление нескольких ресурсов в try-with-resources
try (FileInputStream fis = new FileInputStream("input.txt");
BufferedInputStream bis = new BufferedInputStream(fis);
FileOutputStream fos = new FileOutputStream("output.txt")) {
int data;
while ((data = bis.read()) != -1) {
fos.write(data);
}
// Все ресурсы (fis, bis, fos) будут автоматически закрыты здесь
} catch (IOException e) {
e.printStackTrace();
}
}
}
Ключевые особенности:
- Автоматическое закрытие: Компилятор генерирует блок
finally, который вызываетclose(). - Порядок закрытия: Ресурсы закрываются в порядке, обратном их объявлению (сначала
fos, затемbis, затемfis). - Подавленные исключения: Если в блоке
tryи при закрытии возникли исключения, исключение из блокаtryявляется основным, а исключения отclose()добавляются к нему как подавленные (доступны черезgetSuppressed()).
Типичные ресурсы: потоки ввода-вывода (InputStream, OutputStream), соединения с БД (Connection), сессии.