Автор оригинала: 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!