РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
693 of 1163 menu

Конструкция try с ресурсами

Конструкция try с ресурсами позволяет автоматически закрывать ресурсы (файлы, потоки, соединения), которые были открыты внутри круглых скобок. Такие ресурсы должны реализовывать интерфейс AutoCloseable. Метод close вызывается автоматически после завершения блока, даже если внутри произошло исключение. В круглых скобках можно объявлять один или несколько ресурсов через точку с запятой. Ресурсы закрываются в порядке, обратном их открытию.

Синтаксис

try (ResourceType res = new ResourceType()) { // code that uses the resource } catch (ExceptionType e) { // exception handling }

Пример

Давайте создадим собственный ресурс, реализующий AutoCloseable, и посмотрим, как он закрывается автоматически:

public class Main { public static void main(String[] args) { try (MyResource res = new MyResource()) { res.doSomething(); } catch (Exception e) { System.out.println("Caught: " + e.getMessage()); } } } class MyResource implements AutoCloseable { public void doSomething() { System.out.println("Doing something"); } @Override public void close() { System.out.println("Resource closed"); } }

Результат выполнения кода:

"Doing something" "Resource closed"

Пример

Давайте убедимся, что ресурс закрывается даже при возникновении исключения:

public class Main { public static void main(String[] args) { try (MyResource res = new MyResource()) { throw new RuntimeException("Something went wrong"); } catch (RuntimeException e) { System.out.println("Caught: " + e.getMessage()); } } } class MyResource implements AutoCloseable { @Override public void close() { System.out.println("Resource closed"); } }

Результат выполнения кода:

"Resource closed" "Caught: Something went wrong"

Пример

Давайте откроем два ресурса одновременно, чтобы увидеть порядок их закрытия:

public class Main { public static void main(String[] args) { try (FirstResource first = new FirstResource(); SecondResource second = new SecondResource()) { System.out.println("Using resources"); } } } class FirstResource implements AutoCloseable { @Override public void close() { System.out.println("First resource closed"); } } class SecondResource implements AutoCloseable { @Override public void close() { System.out.println("Second resource closed"); } }

Результат выполнения кода:

"Using resources" "Second resource closed" "First resource closed"

Смотрите также

  • конструкция try,
    которая открывает блок для обработки исключений
  • конструкция catch,
    которая перехватывает исключения
  • конструкция finally,
    которая выполняет код после блока try
  • класс Throwable,
    который является базовым для всех исключений
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить