Перейти до основного вмісту
Модуль 5 · Урок 2 із 210/14 у курсі~12 min
Модульні уроки (2/2)

Спробуйте з ресурсами

У старіших версіях Java керування ресурсами, які потребують явного закриття (такими як файли, підключення до бази даних або мережеві потоки), вимагало обов’язкового блоку finally, щоб гарантувати їх закриття. Це призвело до багатослівного та схильного до витоку коду.

У Java 7 представлено оператор try-with-resources, який гарантує автоматичне закриття всіх ресурсів, оголошених у блоці try, за умови, що вони реалізують інтерфейс AutoCloseable.

Синтаксис

Ресурси оголошуються та ініціалізуються в круглих дужках одразу після ключового слова try.

Java
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
    String line = br.readLine();
    System.out.println(line);
} catch (IOException e) {
    System.out.println("I/O Error: " + e.getMessage());
}
// br is closed automatically here, even if an exception occurs

Оголошення кількох ресурсів

Ви можете створити кілька ресурсів всередині одного блоку try, розділяючи їх крапкою з комою ;. Ресурси будуть закриті в порядку, зворотному їх оголошенню.

Java
try (
    FileReader fr = new FileReader("input.txt");
    FileWriter fw = new FileWriter("output.txt")
) {
    // Use resources
} catch (IOException e) {
    System.out.println("Error: " + e.getMessage());
}

Створення власних ресурсів

Спеціальний ресурс можна використовувати в блоці try-with-resources, якщо він реалізує java.lang.AutoCloseable та замінює метод close().

Java
public class DatabaseConnection implements AutoCloseable {
    public void query(String sql) {
        System.out.println("Running query: " + sql);
    }

    @Override
    public void close() {
        System.out.println("Connection closed!");
    }
}

Спробуйте самі

вправи#java.m5.l2.e1
Спроби: 0Завантаження…

Завершіть метод readFile за допомогою оператора try-with-resources, щоб ініціалізувати BufferedReader, що обертає FileReader на шляху. У блоці catch перехопіть IOException і надрукуйте «Помилка читання файлу».

Завантаження редактора…
Показати підказку

Оголошіть `BufferedReader` у круглих дужках одразу після `try` і застосуйте обробку `IOException`.

Рішення доступне після 3 спроб

вправи#java.m5.l2.e2
Спроби: 0Завантаження…

Створіть екземпляр спеціального ресурсу CustomResource у блоці try-with-resources, викличте для нього метод doWork() і обробіть виняткову ситуацію, надрукувавши «Помилка».

Завантаження редактора…
Показати підказку

Використовуйте `try (CustomResource res = new CustomResource())` і викликайте `res.doWork();` всередині нього.

Рішення доступне після 3 спроб

вправи#java.m5.l2.e3
Спроби: 0Завантаження…

Оголошіть FirstResource і SecondResource в одній конструкції try-with-resources. Обробка виняткової ситуації шляхом друку «Помилка».

Завантаження редактора…
Показати підказку

Розділіть оголошення двох ресурсів у круглих дужках `try` за допомогою крапки з комою `;`.

Рішення доступне після 3 спроб