Конструкция try-with-resources

Author: Tatyana Milkina

Конструкцию try-with-resources ввели в Java 7. Она дает возможность объявлять один или несколько ресурсов в блоке try, которые будут закрыты автоматически без использования finally блока.

В качестве ресурса можно использовать любой объект, класс которого реализует интерфейс java.lang.AutoCloseable или java.io.Closable.

Если try блок также выбрасывает исключение, оно побеждает, а исключение из close() метода подавляется.

Пример 1. Использование блока finally для закрытия ресурса

   public static String readFirstLineFromFileWithFinallyBlock(String path)
            throws IOException {
        BufferedReader br = new BufferedReader(new FileReader(path));
        try {
            return br.readLine();
        } finally {
            if (br != null) {
                br.close();
            }
        }
    }

Перепишем этот блок используя конструкцию try-with-resources:

Пример 2. Использование конструкции try-with-resources для закрытия ресурса

    public static String readFirstLineFromFile(String path) throws IOException {
        try (BufferedReader br =
                     new BufferedReader(new FileReader(path))) {
            return br.readLine();
        }
    }

Пример 3. Использование конструкции try-with-resources для закрытия нескольких ресурсов

    public static String readFirstLineFromFile2(String path)
            throws IOException {
        try (FileReader f = new FileReader("a.txt");
             BufferedReader br = new BufferedReader(f)) {
            return br.readLine();
        }
    }
Read also:
Comments
hmma0723
Jun 14, 2017
If Student is an entity, we cannot use @ElementCollection.