English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основной курс Java

Java Управление потоком

Java Масивы

Java Ориентированность на объекты (I)

Java Ориентированность на объекты (II)

Java Ориентированность на объекты (III)

Обработка исключений Java

Java Списки (List)

Java Очереди (Queue)

Java Карти (Map)

Java Множества (Set)

Java Вход/Выход (I/O)

Java Reader/Writer

Другие темы Java

Улучшения try-with-resources в Java 9

Java 9 новые возможности

try-with-resources - это новый механизм обработки исключений в JDK 7, который позволяет легко закрывать ресурсы, используемые в блоке try-catch. Ресурсом (resource) называется объект, который необходимо закрыть после выполнения программы. Объявление try-with-resources гарантирует, что каждый ресурс закроется к концу строки. Все объекты, реализующие интерфейс java.lang.AutoCloseable (включая все объекты, реализующие java.io.Closeable), могут использоваться в качестве ресурсов.

Объявление try-with-resources в JDK 9 получило улучшения. Если у вас уже есть ресурс, который является final или эквивалентен final переменной, вы можете использовать этот ресурс в заявлении try-with-resources, не声明я новый переменной в заявлении try-with-resources.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
 
public class Tester {
   public static void main(String[] args) throws IOException {
      System.out.println(readData("test"));
   } 
   static String readData(String message) throws IOException {
      Reader inputString = new StringReader(message);
      BufferedReader br = new BufferedReader(inputString);
      try (BufferedReader br1 = br) {
         return br1.readLine();
      }
   }
}

Результат вывода:

test

В предыдущем примере нам нужно声明 ресурс br1 в блоке try, чтобы использовать его.

В Java 9 нам не нужно声明 ресурс br1, чтобы использовать его, и получить такой же результат.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
 
public class Tester {
   public static void main(String[] args) throws IOException {
      System.out.println(readData("test"));
   } 
   static String readData(String message) throws IOException {
      Reader inputString = new StringReader(message);
      BufferedReader br = new BufferedReader(inputString);
      try (br) {
         return br.readLine();
      }
   }
}

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

test

При обработке ресурсов, которые необходимо закрыть, используйте предложение try-with-resources вместо предложения try-finally. Генерируемый код будет более кратким, более ясным и предоставит более полезные исключения. Писать код, который требует закрытия ресурсов, будет легче и безопаснее с использованием предложения try-with-resources, чем с использованием предложения try-finally, которое на практике невозможно.

Java 9 новые возможности