Урок 18

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


Конструкцию 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();
        }
    }


1 comments
  1. hmma0723
    Jun 14, 2017
    If Student is an entity, we cannot use @ElementCollection.
Leave your comment: