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

ява.ланг.Функции ArrayIndexOutOfBoundsException Java 9 с примерами

Функции Java 9 с примерами. Функции Java 1.9. Новые функции Java 9 с примерами REPL, оболочки, модульной системы, реактивных потоков, api изображений, необязательно

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

Java 9-это крупный релиз, и он принес нам много возможностей для разработчиков. В этой статье мы подробно рассмотрим функции Java 9.

Функции Java 9

Некоторые из важных функций java 9 являются;

  1. Java 9 REPL (оболочка)
  2. Заводские методы для неизменяемого списка, набора, карты и Map.Entry
  3. Частные методы в интерфейсах
  4. Модульная система Java 9
  5. Улучшения API процессов
  6. Попробуйте С Улучшением Ресурсов
  7. Улучшения API CompletableFuture
  8. Реактивные Потоки
  9. Алмазный оператор для Анонимного внутреннего класса
  10. Дополнительные Улучшения Класса
  11. Улучшения API потока
  12. Улучшенная @Устаревшая аннотация
  13. Клиент HTTP 2
  14. API изображений с несколькими разрешениями
  15. Другие функции Java 9

Корпорация Oracle планирует выпустить Java SE 9 примерно в конце марта 2017 года. В этом посте я собираюсь кратко обсудить “Функции Java 9” с некоторыми примерами.

Java 9 REPL (оболочка)

Корпорация Oracle представила новый инструмент под названием “оболочка”. Он расшифровывается как оболочка Java и также известен как REPL (Цикл чтения и печати). Он используется для выполнения и тестирования любых конструкций Java, таких как класс, интерфейс, перечисление, объект, операторы и т.д. очень легко.

Мы можем загрузить программное обеспечение JDK 9 EA (ранний доступ) с https://jdk9.java.net/download/

G:\>jshell
|  Welcome to JShell -- Version 9-ea
|  For an introduction type: /help intro


jshell> int a = 10
a ==> 10

jshell> System.out.println("a value = " + a )
a value = 10

Если вы хотите узнать больше об инструменте REPL, пожалуйста, ознакомьтесь с основами Java 9 REPL (часть 1) и функциями Java 9 REPL (часть 2) .

Заводские методы для неизменяемого списка, набора, карты и Map.Entry

Корпорация Oracle представила несколько удобных заводских методов для создания неизменяемых объектов списка, набора, карты и Map.Entry. Эти служебные методы используются для создания пустых или непустых объектов коллекции.

В Java SE 8 и более ранних версиях мы можем использовать служебные методы класса коллекций, такие как unmodifiableXXX , для создания неизменяемых объектов коллекции. Например, если мы хотим создать неизменяемый список, мы можем использовать метод Collections.unmodifiableList .

Однако эти Collections.unmodifiableXXX методы являются утомительным и подробным подходом. Чтобы преодолеть эти недостатки, Oracle Corp добавила несколько полезных методов для отображения, настройки и отображения интерфейсов.

Интерфейсы списка и набора имеют методы “of()” для создания пустого или непустого неизменяемого списка или набора объектов, как показано ниже:

Пример Пустого Списка

List immutableList = List.of();

Пример Непустого Списка

List immutableList = List.of("one","two","three");

Карта имеет два набора методов: из() методов и Записей() методов для создания неизменяемого объекта карты и Неизменяемого объекта Map.Entry соответственно.

Пример Пустой Карты

jshell> Map emptyImmutableMap = Map.of()
emptyImmutableMap ==> {}

Пример Непустой Карты

jshell> Map nonemptyImmutableMap = Map.of(1, "one", 2, "two", 3, "three")
nonemptyImmutableMap ==> {2=two, 3=three, 1=one}

Если вы хотите узнать больше об этих полезных методах, пожалуйста, перейдите по следующим ссылкам:

  • Заводские методы Java 9 для неизменяемого списка
  • Java 9 Заводские методы для неизменяемого набора
  • Заводские методы Java 9 для неизменяемой карты и Map.Entry

Частные методы в интерфейсах

В Java 8 мы можем обеспечить реализацию методов в интерфейсах, используя стандартные и статические методы. Однако мы не можем создавать частные методы в интерфейсах.

Чтобы избежать избыточного кода и большей возможности повторного использования, Oracle Corp собирается внедрить частные методы в интерфейсы Java SE 9. Начиная с Java SE 9 и далее, мы также можем писать частные и частные статические методы в интерфейсе, используя ключевое слово “private”.

Эти частные методы похожи только на частные методы других классов, между ними нет никакой разницы.

public interface Card{

  private Long createCardID(){
    // Method implementation goes here.
  }

  private static void displayCardDetails(){
    // Method implementation goes here.
  }

}

Если вы хотите узнать больше об этой новой функции, пожалуйста, перейдите по этой ссылке: Частные методы Java 9 в интерфейсе .

Модульная система Java 9

Одним из больших изменений или функций java 9 является Модульная система. Oracle Corp собирается представить следующие функции в рамках проекта Jigsaw .

  • Модульный JDK
  • Модульный исходный Код Java
  • Модульные изображения во время выполнения
  • Инкапсулировать Внутренние API Java
  • Система Модулей Платформы Java

До версий Java SE 9 мы использовали монолитные банки для разработки приложений на основе Java. Эта архитектура имеет множество ограничений и недостатков. Чтобы избежать всех этих недостатков, Java SE 9 поставляется с системой модулей.

JDK 9 поставляется с 92 модулями (может измениться в финальной версии). Мы можем использовать модули JDK, а также создавать ваши собственные модули, как показано ниже:

Простой Пример Модуля

module com.foo.bar { }

Здесь мы используем “модуль” для создания простого модуля. Каждый модуль имеет имя, соответствующий код и другие ресурсы.

Чтобы узнать более подробную информацию об этой новой архитектуре и практическом опыте, пожалуйста, ознакомьтесь с моими оригинальными учебными пособиями здесь:

  • Основы системы модулей Java 9
  • Примеры модулей Java 9 с использованием командной строки
  • Пример модуля Java 9 Hello World с использованием среды разработки Eclipse

Улучшения API процессов

Java SE 9 поставляется с некоторыми улучшениями в API процессов. Они добавили пару новых классов и методов для облегчения контроля и управления процессами операционной системы.

Два новых интерфейса в API процессов:

  • Два новых интерфейса в API процессов:
  • Два новых интерфейса в API процессов:

Пример API процесса

 ProcessHandle currentProcess = ProcessHandle.current();
 System.out.println("Current Process Id: = " + currentProcess.getPid());

Попробуйте С Улучшением Ресурсов

Мы знаем, что Java SE 7 представила новую конструкцию обработки исключений: Попробуйте с помощью ресурсов автоматически управлять ресурсами. Основная цель этого нового заявления – “Автоматическое улучшение управления ресурсами”.

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

Пример Java SE 7

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

Пример Java 9

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

Чтобы узнать больше об этой новой функции, пожалуйста, ознакомьтесь с моим оригинальным учебником по адресу: Java 9 Попробуйте с улучшениями ресурсов

Улучшения API CompletableFuture

В Java SE 9 корпорация Oracle намерена улучшить API CompletableFuture для решения некоторых проблем, возникших в Java SE 8. Они будут добавлены для поддержки некоторых задержек и тайм-аутов, некоторых полезных методов и улучшения подклассов.

Executor exe = CompletableFuture.delayedExecutor(50L, TimeUnit.SECONDS);

Здесь delayedExecutor () – это статический служебный метод, используемый для возврата нового исполнителя, который отправляет задачу исполнителю по умолчанию после заданной задержки.

Реактивные Потоки

В настоящее время реактивное программирование стало очень популярным при разработке приложений, чтобы получить некоторые прекрасные преимущества. Scala, Play, Akka и т. Д. Фреймворки уже интегрировали реактивные потоки и получили множество преимуществ. Oracle Corp также представляет новый API реактивных потоков в Java SE 9.

API реактивных потоков Java SE 9 – это платформа публикации/подписки для очень простой реализации асинхронных, масштабируемых и параллельных приложений с использованием языка Java.

Java SE 9 представила следующий API для разработки реактивных потоков в приложениях на базе Java.

  • Java SE 9 представила следующий API для разработки реактивных потоков в приложениях на базе Java.
  • Java SE 9 представила следующий API для разработки реактивных потоков в приложениях на базе Java.
  • Java SE 9 представила следующий API для разработки реактивных потоков в приложениях на базе Java.
  • Java SE 9 представила следующий API для разработки реактивных потоков в приложениях на базе Java.

Подробнее читайте в разделе Реактивные потоки Java 9 .

Алмазный оператор для Анонимного внутреннего класса

Мы знаем, что Java SE 7 представила одну новую функцию: оператор Diamond, чтобы избежать избыточного кода и многословия, чтобы улучшить читаемость. Однако в Java SE 8 Oracle Corp (разработчик библиотеки Java) обнаружила некоторые ограничения в использовании оператора Diamond с анонимным внутренним классом. Они исправили эти проблемы и собираются выпустить их как часть Java 9.

  public List getEmployee(String empid){
     // Code to get Employee details from Data Store
     return new List(emp){ };
  }

Здесь мы используем только “Список” без указания параметра типа.

Дополнительные Улучшения Класса

В Java SE 9 корпорация Oracle добавила некоторые полезные новые методы в java.util.Необязательный класс. Здесь я собираюсь обсудить один из этих методов с помощью простого примера: потоковый метод

Если значение присутствует в данном необязательном объекте, этот метод stream() возвращает последовательный поток с этим значением. В противном случае он возвращает пустой поток.

Они добавили метод “stream()” для ленивой работы с необязательными объектами, как показано ниже:

Stream emp = getEmployee(id)
Stream empStream = emp.flatMap(Optional::stream)

Здесь метод Optional.stream() используется для преобразования потока необязательного объекта Сотрудника в поток сотрудника, чтобы мы могли лениво работать над этим результатом в коде результата.

Чтобы узнать больше об этой функции с большим количеством примеров и прочитать больше новых методов, добавленных в дополнительный класс, пожалуйста, ознакомьтесь с моим оригинальным руководством по адресу: Java SE 9: Дополнительные улучшения класса

Улучшения API потока

В Java SE 9 корпорация Oracle добавила в java.util четыре новых полезных метода.Потоковый интерфейс. Поскольку поток является интерфейсом, все эти новые реализованные методы являются методами по умолчанию. Два из них очень важны: методы dropWhile и takeWhile

Если вы знакомы с языком Scala или любым другим языком программирования функций, вы определенно знаете об этих методах. Это очень полезные методы при написании некоторого кода функционального стиля. Давайте обсудим здесь метод утилиты takeWhile.

Эта функция takeWhile() принимает предикат в качестве аргумента и возвращает поток подмножества заданных значений потока до тех пор, пока этот предикат не вернет значение false в первый раз. Если первое значение НЕ удовлетворяет этому Предикату, оно просто возвращает пустой поток.

jshell> Stream.of(1,2,3,4,5,6,7,8,9,10).takeWhile(i -> i < 5 )
                 .forEach(System.out::println);
1
2
3
4

Чтобы узнать больше о методах takewile и Dropwile и других новых методах, пожалуйста, ознакомьтесь с моим оригинальным руководством по адресу: Java SE 9: Улучшения API потока

Улучшенная @Устаревшая аннотация

В Java SE 8 и более ранних версиях @Устаревшая аннотация-это просто интерфейс маркера без каких-либо методов. Он используется для обозначения Java API, который представляет собой класс, поле, метод, интерфейс, конструктор, перечисление и т.д.

В Java SE 9 корпорация Oracle улучшила аннотацию @Deprecated, чтобы предоставить дополнительную информацию об устаревшем API, а также предоставить Инструмент для анализа статического использования приложением устаревших API. Они добавили два метода в этот устаревший интерфейс: для удаления и с для предоставления этой информации.

Клиент HTTP 2

В Java SE 9 корпорация Oracle собирается выпустить новый клиентский API HTTP 2 для поддержки протокола HTTP/2 и функций WebSocket. Поскольку существующий или устаревший API HTTP-клиента имеет множество проблем (например, поддерживает протокол HTTP/1.1 и не поддерживает протокол HTTP/2 и WebSocket, работает только в режиме блокировки и имеет множество проблем с производительностью.), они заменяют этот API HttpURLConnection новым HTTP-клиентом.

Они собираются представить новый клиентский API HTTP 2 в пакете “java.net.http”. Он поддерживает протоколы HTTP/1.1 и HTTP/2. Он поддерживает как синхронный (режим блокировки), так и асинхронный режимы. Он поддерживает асинхронный режим с использованием API WebSocket.

Мы можем увидеть этот новый API на https://download.java.net/java/jdk9/docs/api/java/net/http/package-summary.html

Пример клиента HTTP 2

jshell> import java.net.http.*

jshell> import static java.net.http.HttpRequest.*

jshell> import static java.net.http.HttpResponse.*

jshell> URI uri = new URI("https://rams4java.blogspot.co.uk/2016/05/java-news.html")
uri ==> https://rams4java.blogspot.co.uk/2016/05/java-news.html

jshell> HttpResponse response = HttpRequest.create(uri).body(noBody()).GET().response()
response ==> java.net.http.HttpResponseImpl@79efed2d

jshell> System.out.println("Response was " + response.body(asString()))

Пожалуйста, ознакомьтесь с моим оригинальным учебником по адресу: Java SE 9: Клиент HTTP 2 , чтобы понять протокол HTTP/2 и WebSocket, преимущества нового API и недостатки СТАРОГО API с некоторыми полезными примерами.

API изображений с несколькими разрешениями

В Java SE 9 корпорация Oracle собирается представить новый API изображений с несколькими разрешениями. Важным интерфейсом в этом API является изображение с несколькими разрешениями . Он доступен в пакете java.awt.image.

Изображение с несколькими разрешениями инкапсулирует набор изображений с разной высотой и шириной (то есть с разным разрешением) и позволяет нам запрашивать их в соответствии с нашими требованиями.

Другие функции Java 9

В этом разделе я просто перечислю некоторые другие новые функции Java SE 9. Я НЕ говорю, что это менее важные функции. Они также важны и полезны, чтобы очень хорошо понять их с помощью некоторых полезных примеров.

На данный момент я не получил достаточной информации об этих функциях. Вот почему я собираюсь перечислить их здесь для краткого понимания. Я рассмотрю эти функции одну за другой и добавлю в вышеприведенный раздел краткое обсуждение и пример. И, наконец, позже напишите отдельный учебник.

  • Улучшения GC (Сборщик мусора)
  • API для обхода стека
  • Фильтровать Входящие Данные Сериализации
  • Устарел API апплета
  • Объединение строк с индексацией
  • Улучшенные Ручки Метода
  • API и служба ведения журнала платформы Java
  • Компактные Струны
  • API парсера для Nashorn
  • Поиск в Javadoc
  • HTML5 Javadoc

Я буду подбирать эти функции java 9 одну за другой и обновлять их достаточным количеством описаний и примеров.

Вот и все о функциях Java 9 вкратце с примерами.