Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Java-проба с ресурсами

Попробуйте ресурсы Java

В этом руководстве мы узнаем об операторе try-with-resources для автоматического закрытия ресурсов.

try-with-resources оператор автоматически закрывает все ресурсы в конце оператора. Ресурс — это объект, который необходимо закрыть в конце программы.

Его синтаксис:

try (resource declaration) {
  // use of the resource
} catch (ExceptionType e1) {
  // catch block
}

Как видно из приведенного выше синтаксиса, мы объявляем try-with-resources заявление,

  1. объявление и создание экземпляра ресурса в try пункт.
  2. указание и обработка всех исключений, которые могут возникнуть при закрытии ресурса.

Примечание. Оператор try-with-resources закрывает все ресурсы, реализующие интерфейс AutoCloseable.

<час>

Давайте возьмем пример, который реализует try-with-resources заявление.

Пример 1:попробуйте с ресурсами

import java.io.*;

class Main {
  public static void main(String[] args) {
    String line;
    try(BufferedReader br = new BufferedReader(new FileReader("test.txt"))) {
      while ((line = br.readLine()) != null) {
        System.out.println("Line =>"+line);
      }
    } catch (IOException e) {
      System.out.println("IOException in try block =>" + e.getMessage());
    }
  }
}

Вывод, если файл test.txt не найден.

IOException in try-with-resources block =>test.txt (No such file or directory)

Вывод, если файл test.txt найден.

Entering try-with-resources block
Line =>test line

В этом примере мы используем экземпляр BufferedReader. для чтения данных из test.txt файл.

Объявление и создание экземпляра BufferedReader внутри try-with-resources Оператор гарантирует, что его экземпляр будет закрыт независимо от того, находится ли try Оператор завершается нормально или выдает исключение.

Если возникает исключение, его можно обработать с помощью блоков обработки исключений или ключевого слова throws.

<час>

Подавленные исключения

В приведенном выше примере исключения могут быть вызваны из try-with-resources заявление, когда:

Исключение также может быть вызвано из try блокировать, так как чтение файла может завершиться ошибкой по многим причинам в любое время.

Если исключения генерируются как из try блок и try-with-resources заявление, исключение из try выдается блок и исключение из try-with-resources оператор подавлен.

Получение подавленных исключений

В Java 7 и более поздних версиях подавленные исключения можно получить, вызвав функцию Throwable.getSuppressed(). метод из исключения, вызванного try блокировать.

Этот метод возвращает массив всех подавленных исключений. Мы получаем подавленные исключения в catch блокировать.

catch(IOException e) {
  System.out.println("Thrown exception=>" + e.getMessage());
  Throwable[] suppressedExceptions = e.getSuppressed();
  for (int i=0; i<suppressedExceptions.length; i++) {
    System.out.println("Suppressed exception=>" + suppressedExceptions[i]);
  }
}
<час>

Преимущества использования try-with-resources

Вот преимущества использования попытки с ресурсами:

1. блок finally не требуется для закрытия ресурса

До того, как Java 7 представила эту функцию, нам приходилось использовать finally заблокировать, чтобы убедиться, что ресурс закрыт, чтобы избежать утечки ресурсов.

Вот программа, похожая на Пример 1. . Однако в этой программе мы использовали блок finally для закрытия ресурсов.

Пример 2. Закрытие ресурса с помощью блока finally

import java.io.*;

class Main {
  public static void main(String[] args) {
    BufferedReader br = null;
    String line;

    try {
      System.out.println("Entering try block");
      br = new BufferedReader(new FileReader("test.txt"));
      while ((line = br.readLine()) != null) {
        System.out.println("Line =>"+line);
      }
    } catch (IOException e) {
      System.out.println("IOException in try block =>" + e.getMessage());
    } finally {
      System.out.println("Entering finally block");
      try {
        if (br != null) {
          br.close();
        }
      } catch (IOException e) {
        System.out.println("IOException in finally block =>"+e.getMessage());
      }

    }
  }
}

Вывод

Entering try block
Line =>line from test.txt file
Entering finally block 

Как видно из приведенного выше примера, использование finally блок очистки ресурсов усложняет код.

Обратите внимание на try...catch блок в finally тоже блокировать? Это связано с тем, что IOException также может произойти при закрытии BufferedReader экземпляр внутри этого finally заблокировать, чтобы он также был перехвачен и обработан.

try-with-resources оператор выполняет автоматическое управление ресурсами . Нам не нужно явно закрывать ресурсы, поскольку JVM автоматически закрывает их. Это делает код более читабельным и простым в написании.

<час>

2. попробуйте с ресурсами с несколькими ресурсами

Мы можем объявить более одного ресурса в try-with-resources оператора, разделяя их точкой с запятой ;

Пример 3:попробуйте использовать несколько ресурсов

import java.io.*;
import java.util.*;
class Main {
  public static void main(String[] args) throws IOException{
    try (Scanner scanner = new Scanner(new File("testRead.txt")); 
      PrintWriter writer = new PrintWriter(new File("testWrite.txt"))) {
      while (scanner.hasNext()) {
        writer.print(scanner.nextLine());
      }
    }
  }
}

Если эта программа выполняется без каких-либо исключений, Scanner объект читает строку из testRead.txt файл и записывает его в новый testWrite.txt файл.

Когда делается несколько объявлений, try-with-resources Оператор закрывает эти ресурсы в обратном порядке. В этом примере PrintWriter сначала закрывается объект, а затем Scanner объект закрыт.

<час>

Улучшение функции "проба с ресурсами" в Java 9

В Java 7 есть ограничение на try-with-resources утверждение. Ресурс должен быть объявлен локально в его блоке.

try (Scanner scanner = new Scanner(new File("testRead.txt"))) {
  // code
}

Если бы мы объявили ресурс вне блока в Java 7, это сгенерировало бы сообщение об ошибке.

Scanner scanner = new Scanner(new File("testRead.txt"));
try (scanner) {
  // code
}

Чтобы справиться с этой ошибкой, в Java 9 улучшен код try-with-resources. оператор, чтобы можно было использовать ссылку на ресурс, даже если он не объявлен локально. Приведенный выше код теперь будет выполняться без ошибок компиляции.


java

  1. Операторы Java
  2. Java-комментарии
  3. Оператор Java if...else
  4. Java для каждого цикла
  5. Java-строки
  6. Java-интерфейс
  7. Анонимный класс Java
  8. Java-аннотации
  9. Утверждения Java
  10. Java вектор