English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
try-with-resources - это новый механизм обработки исключений в JDK 7, который позволяет легко закрывать ресурсы, используемые в блоке try-catch. Ресурсом (resource) называется объект, который необходимо закрыть после выполнения программы. Объявление try-with-resources гарантирует, что каждый ресурс закроется к концу строки. Все объекты, реализующие интерфейс java.lang.AutoCloseable (включая все объекты, реализующие java.io.Closeable), могут использоваться в качестве ресурсов.
Объявление try-with-resources в JDK 9 получило улучшения. Если у вас уже есть ресурс, который является final или эквивалентен final переменной, вы можете использовать этот ресурс в заявлении try-with-resources, не声明я новый переменной в заявлении try-with-resources.
import java.io.BufferedReader; import java.io.IOException; import java.io.Reader; import java.io.StringReader; public class Tester { public static void main(String[] args) throws IOException { System.out.println(readData("test")); } static String readData(String message) throws IOException { Reader inputString = new StringReader(message); BufferedReader br = new BufferedReader(inputString); try (BufferedReader br1 = br) { return br1.readLine(); } } }
Результат вывода:
test
В предыдущем примере нам нужно声明 ресурс br1 в блоке try, чтобы использовать его.
В Java 9 нам не нужно声明 ресурс br1, чтобы использовать его, и получить такой же результат.
import java.io.BufferedReader; import java.io.IOException; import java.io.Reader; import java.io.StringReader; public class Tester { public static void main(String[] args) throws IOException { System.out.println(readData("test")); } static String readData(String message) throws IOException { Reader inputString = new StringReader(message); BufferedReader br = new BufferedReader(inputString); try (br) { return br.readLine(); } } }
Результат выполнения вывода:
test
При обработке ресурсов, которые необходимо закрыть, используйте предложение try-with-resources вместо предложения try-finally. Генерируемый код будет более кратким, более ясным и предоставит более полезные исключения. Писать код, который требует закрытия ресурсов, будет легче и безопаснее с использованием предложения try-with-resources, чем с использованием предложения try-finally, которое на практике невозможно.