Рубрики
Без рубрики

Java SE 9: Улучшения с Использованием Ресурсов

Опубликовать краткое содержание: Введение Java SE 7: Основы работы с ресурсами Java SE 7: Правила работы с ресурсами Java SE 9: Работа с Ресурсами

Автор оригинала: Pankaj Kumar.

Опубликуйте Краткое содержание:

  • Вступление
  • Java SE 7: Основы работы с Ресурсами
  • Java SE 7: Правила использования Ресурсов
  • Java SE 9: Улучшения с Использованием Ресурсов

Вступление

Корпорация Oracle собирается выпустить новую версию Java: Java SE 9 примерно в конце марта 2017 года. Итак, я хотел бы опубликовать серию сообщений о новых функциях Java SE 9. Это мой восьмой пост в этой серии.

В этом посте мы обсудим некоторые улучшения для использования ресурсов в Java SE 9. Давайте начнем изучать эту конструкцию прямо сейчас.

Java SE 7: Основы работы с Ресурсами

Java SE 7 представила новую конструкцию: оператор Try-With-Resources для лучшей обработки исключений. Без этой конструкции разработчику приходится писать много избыточного и уродливого кода. Если разработчик забудет о правильном закрытии ресурсов, в нашем приложении возникнут проблемы с утечкой ресурсов.

Основными целями этой новой функции являются:

  • Синтаксический Сахар
  • Избегайте написания какого-либо блока извлечения/окончательного блока.

  • Более Читаемый Код
  • Нет необходимости выполнять нулевые проверки
  • Нет необходимости проверять, ссылается ли ссылка на ресурс на объект или имеет значение null.

  • Более Эффективное Управление Ресурсами
  • ARM (Автоматическое управление ресурсами)

  • Чтобы избежать утечек памяти

Пример Использования Ресурсов-1:-

void testARM_Before_Java9() throws IOException{
 BufferedReader reader1 = new BufferedReader(new FileReader("journaldev.txt"));
 try (BufferedReader reader2 = reader1) {
   System.out.println(reader2.readLine());
 }
}

Здесь мы создали служебный метод, который создает объект BufferedReader для чтения содержимого файла. Если мы наблюдаем приведенный выше фрагмент кода, даже если у нас есть reader1, ссылающийся на объект BufferedReader, мы должны создать дубликат “reader2”, чтобы использовать его в Try-With-Resources. Это одна небольшая ошибка или проблема в версиях Java SE 7 или 8.

Мы не можем использовать какой-либо ресурс (который объявлен за пределами Try-With-Resources) в блоке try() инструкции Try-With-Resources.

Приведенный ниже код недопустим в версиях Java SE 7 или 8. Это приводит к ошибке во время компиляции.

Пример с Использованием Ресурсов-2:-

void testARM_Before_Java9() throws IOException{
 BufferedReader reader1 = new BufferedReader(new FileReader("journaldev.txt"));
 try (reader1) {
   System.out.println(reader1.readLine());
 }
}

ПРИМЕЧАНИЕ:- Если вы хотите прочитать дополнительную информацию об этом компоненте, пожалуйста, ознакомьтесь с этим руководством: Java SE 7: Попробуйте-с-ресурсами

Java SE 7: Правила использования Ресурсов

В версиях Java SE 7 или 8 мы должны следовать этим правилам, чтобы использовать инструкцию Try-With-Resources для автоматического управления ресурсами(ARM).

  • Любой ресурс (который предопределен классом Java API или определенным пользователем классом) должен реализовывать java.lang.Автоклавируемый.
  • Объект ресурса должен ссылаться либо на конечную, либо фактически на конечную переменную
  • Если ресурс уже объявлен вне инструкции Try-With-Resources, мы должны повторно обратиться к локальной переменной (как показано в приведенном выше примере кода-1).
  • Эта вновь созданная локальная переменная допустима для использования в инструкции Try-With-Resources.

Java SE 9: Улучшения с Использованием Ресурсов

Java SE 9 внесла некоторые улучшения в инструкцию Try-With-Resources. Как мы обсуждали в предыдущих разделах, версии Java SE 7 или 8 имеют одну небольшую проблему или ошибку с этим утверждением.

В Java SE 9, если у нас есть ресурс, который уже объявлен вне оператора Try-With-Resource как окончательный или фактически окончательный, нам НЕ нужно объявлять локальную переменную. Мы можем использовать ранее созданную переменную в инструкции Try-With-Resource без каких-либо проблем, как показано ниже:

Пример Использования Ресурсов-3:-

void testARM_Java9() throws IOException{
 BufferedReader reader1 = new BufferedReader(new FileReader("journaldev.txt"));
 try (reader1) {
   System.out.println(reader1.readLine());
 }
}

Этот пример является допустимым кодом с Java SE 9. Мы не создаем другую локальную переменную, такую как reader 2, для ссылки на reader 1, как показано в примере-1. Давайте выполним оба примера в Java SE 9 REPL, чтобы протестировать их.

Тестовый пример-1 с ответом Java SE 9:-

jshell> void testARM_Before_Java9() throws IOException{
   ...> BufferedReader reader1 = new BufferedReader(new FileReader("journaldev.txt"));
   ...> try (BufferedReader reader2 = reader1) {
   ...> System.out.println(reader2.readLine());
   ...> }
   ...> }
|  created method testARM_Before_Java9()

jshell> testARM_Before_Java9()
journaldev

Тестовый пример-3 с ОТВЕТОМ Java SE 9:-

jshell> void testARM_Java9() throws IOException{
   ...> BufferedReader reader1 = new BufferedReader(new FileReader("journaldev.txt"));
   ...> try (reader1) {
   ...> System.out.println(reader1.readLine());
   ...> }
   ...> }
|  created method testARM_Java9()

jshell> testARM_Java9()
journaldev

Вот и все о новой функции “Java SE 9: Улучшения с использованием ресурсов”. Мы обсудим еще несколько новых функций Java SE 9 в моих следующих постах.

Пожалуйста, напишите мне комментарий, если вам нравится мой пост или у вас есть какие-либо вопросы/предложения/ошибки типа.

Спасибо, что прочитали мои учебные пособия.

Счастливого Обучения Java SE 9!