Elettracompany.com

Компьютерный справочник
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Java jdk 9

Нововведения в Java 9: разбираем на примерах

    Переводы, 25 марта 2017 в 20:23

Ожидается, что новая версия Java 9 выйдет уже 27 июля 2017 года. Давайте разберёмся, какие функции появятся, и расскажем, зачем они нужны.

Вот список важных нововведений Java 9:

С помощью примеров расскажем подробнее об этих функциях.

JShell

REPL (англ. read-eval-print loop) — система для интерактивного программирования в консоли. То есть если пользователь вводит строку кода, в консоли появляется результат её выполнения и этот процесс повторяется.

Oracle представила новый инструмент под названием «JShell». Он используется для тестирования и использования в консоли разных конструкций, например классов, интерфейсов, перечислений, объектов, операторов и т.д.

Кстати, уже сейчас можно загрузить бета-версию JDK 9, скачав её с официального сайта .

Простейший пример работы с JShell:

Неизменяемые объекты List, Set и Map «из коробки»

Oracle представила несколько удобных методов для создания неизменяемых List, Set, Map и Map.Entry объектов без использования дополнительных классов

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

Однако это неудобно, поэтому Oracle добавила несколько вспомогательных методов в интерфейсы List, Set и Map.

Sportmaster Lab, Москва

List и Set интерфейсы имеют of() методы. Примеры их использования можно увидеть ниже:

Map имеет два набора методов: of() методы и ofEntries() методы для создания объектов Immutable Map и Map.Entry.

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

В Java 8 мы можем обеспечивать реализацию метода в интерфейсах, используя default и static методы. Однако мы не можем создавать private методы в интерфейсах.
Для избавления от нагромождения и переизбытка кода Oracle собирается добавить private методы в интерфейсы Java SE 9. Начиная с девятой версии, мы также сможем создавать private static методы в интерфейсах с помощью private.

Создание реализации метода для интерфейса по умолчанию:

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

Одним из самых значительных изменений является появление модульной системы. До Java 9 мы использовали JAR-файлы для разработки приложений, базирующихся на Java. Однако, эта архитектура имеет несколько ограничений и недостатков. Для их устранения и внедрили модульную систему . Это нововведение является частью проекта Jigsaw , который разрабатывается для того, чтобы программисты могли разбивать программы на независимые и межпрограммные модули.

Вот некоторые из функций этой системы:

  • модульная JDK;
  • модульный исходный код Java;
  • модульные run-time изображения;
  • инкапсуляция внутренних API;
  • система модульной платформы;

JDK 9 поставляется с 92 модулями. Мы можем использовать их или создать свои, например:

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

Улучшение API

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

Пример Process API:

Здесь нами был создан объект типа ProcessHandle для работы с действиями операционной системе.

Изменения в try-with-resources

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

Пример в Java 9:

Можно заметить, что в новой версии, после try не обязательно объявлять новую переменную.

Новшества в CompletableFuture API

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

Здесь delayedExecutor() — static метод, используемый для возврата исполнителя, после заданной задержки.

Реактивное программирование

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

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

В Java SE 9 появятся следующие API:

  • java.util.concurrent.Flow;
  • java.util.concurrent.Flow.Publisher;
  • java.util.concurrent.Flow.Subscriber;
  • java.util.concurrent.Flow.Processor.

Diamond оператор для анонимных классов

Предположим, что у нас есть класс Box и мы хотим сделать его анонимным.
Вот как выглядит этот процесс в Java 8:

Разве не очевидно, что Box должен быть типа T? Компилятор в случае не-анонимного класса выбрал бы нужный тип, так почему бы не сделать то же самое с анонимным?

Проблема в не обозначаемых (англ. non-denotable) типах, которые распознаются компилятором, а JVM — нет. (Такой случай может быть обработан компилятором, но вопрос — как корректно передать его JVM.)

Поэтому Diamond оператор не допускался в использовании с анонимными классами. Теперь же это возможно.

Вот как это выглядит в Java 9:

Дополнительные улучшения в классах

В Java SE 9 Oracle добавила несколько полезных методов в java.util.Optional.
Вот например как работает метод stream:

Здесь используется метод Optional.stream(), который конвертирует всё в поток Employee.

Улучшения Stream API

В новой версии появятся как минимум четыре метода java.util.Stream . Как и stream, все они будут стандартными. Наиболее важными являются dropWhile и takeWhile методы.
Если вы знакомы с языком Scala или функциональным программированием, вы обязательно узнаете эти методы.

Простейшее применение stream:

Расширенные аннотации @Deprecated

До Java 9 @Deprecated — просто интерфейс-маркер. Многие разработчики предлагали Oracle улучшить информирование об устаревших возможностях API . Их услышали и добавили возможности работы с устаревшими API. Например, появились инструменты для их анализа — forRemoval и since .

HTTP/2 клиент

Oracle планирует выкатить новый HTTP-клиент для поддержки протоколов HTTP/2 и WebSocket. Они заменяют HttpURLConnection API на новый, более производительный.
Новый API будет представлен в пакете «java.net.http». Он поддерживает как синхронный, так и асинхронный режимы.

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

Oracle планирует внедрить новый API для изображений разных разрешений. Наиболее важным является интерфейс MultiResolutionImage доступный в пакете java.awt.image .

Другие изменения

Помимо вышеперечисленных изменений, ожидаются и другие. Вот лишь некоторые из них:

Java jdk 9

Краткое описание:
Поддержка программ, написанных на языке Java базового уровня. (напр. для запуска того же Minecraft или работа с APK)

Описание:
(с Вики + изменениями на «людской язык»)
Java Runtime Environment (сокр. JRE) — минимальная реализация виртуальной машины, необходимая для исполнения Java-приложений, без компилятора и других средств разработки.

Можно описать много чело, есть огромное кол-во ссылок по поводу JRE, поэтому я не буду всё описывать — это можно найти прямо на самом сайте — https://www.java.com/ru/

  • Условные обозначения:
    (?) — не точно, возможно что не сработает, или возможно, ухудшит работу.
    Q: — вопрос.
    Z: — ответ.

Q: Программы не видят Java, что б я не делал.
Z: Java использует переменную среду Win для своего обнаружения (или ссылания на себя). Но почему-то установщик сам редко когда записывает в среду это значение, поэтому Java себя и не показывает.

Это также касается JDK и прочих!

Увы, я знаю только как на Windows это выглядит. С «Пингвином» и т.д. — хз как там. Можете написать в тему инструкцию, кину сюда ссылку на пост.

Пути практически идентичны в разных версиях Windows:

[b]Все элементы панели управления[b] -> Система -> Доп. параметры системы -> Дополнительно -> Переменные среды -> Системные переменные -> нажать на «PATH» -> -> Изменить. -> Создать -> прописать путь к версии Java.
Пример: У меня стоит 64-bit, поэтому я пишу C:Program FilesJavajre* (звёздочка — номер версии).
Для 32-bit: C:Program Files (x86)Javajre*.
P.S. Можно зайти в C:Program FilesJava и вписать версии которые там есть.

Читать еще:  Exceptionininitializererror java что это

Если не сработает, то пробуем после jre* дописать bin, т.е. C:Program FilesJavajre*bin.

— 512Мб: 512 Мб , естественно.
— 1Гб: 1024 Мб
— 2Гб: 2048 Мб
— 3Гб: 3072 Мб
— 4Гб: 4096 Мб
— 6Гб: 6144 Мб
— 8Гб: 8192 Мб
— 16Гб: 16384 Мб
— 32Гб: 32768 Мб
— И т.д.

Можно открыть калькулятор и посчитать в ручную, если нужно собственное значение. Пример: Нужно 5Гб? 4096 + 1024 = 5120. Живой пример.

При обнаружении проблем и ответов на них — писать в тему, добавлю сюда ссылку на автора текста.

Русский интерфейс: Нет

  • Beta v8u202
    • Windows:
      • Web, 32-bit:ТЫЧКА
      • Автономно, 32-bit:ТЫЧКА
        • Распакованный:ТЫЧКА
      • Автономно, 64-bit:ТЫЧКА
        • Распакованный:ТЫЧКА

    • Linux:
      • 32-bit:ТЫЧКА
        • Распакованный:ТЫЧКА
      • 64-bit:ТЫЧКА
        • Распакованный:ТЫЧКА

    • Mac OS X:
      • Автономно, 64-bit:ТЫЧКА
        • Распакованный:ТЫЧКА

    • Solaris:
      • Распакованный, 64-bit:ТЫЧКА

    • Solaris SPARC:
      • Распакованный, 64-bit:ТЫЧКА

В теме нет куратора. Если нужно что-то изменить в шапке, добавить какую-то обнову, и т.д. — мне в QMS и кинуть ссылку на пост, на который нужно указать ссылку. Возможно личное наименовывание ссылки.
Если я не буду отвечать промежуточное время (пару дней, а не один или полтора дня), то обращайтесь к модераторам раздела через кнопку под постами, на которые необходимо добавить ссылки. Я потом отредактирую шапку по порядку.

Сообщение отредактировал ctich — 20.03.19, 19:48

Всем привет, уважаемые форумчане.

Прошу у вас помощи, так как исчерпал возможности самостоятельно решить проблему с ява.

Детали- На Netbeans написал пример приложения на Ява, скомпилировал. Пробую запустить в консоли- вылазит сообщение

«A JNI error has occurred, please check your installation and try again
Exception in thread «main» java.lang.UnsupportedClassVersionError: verysimplechatserver/VerySimpleChatServer has been compiled by a more recent version of the Java Runtime (class file version 54.0), this version of the Java Runtime only recognizes class file versions up to 52.0″

Тоесть моя версия JNI на компе ниже чем нужно.

Ява обновил с официального сайта- не помогло.
Установил отдельно JDK с оф сайта- не помогло.

Возможно нужно в Netbeans указать целевую версию ява для компиляции- но как это сделать.

Сорь, правка- моя версия JRE ниже чем 54.

установка последней версии JRE с сйта Oracle ничего не поменяла.

Тэк, отчёт по проблеме-

Удалил вообще все версии Ява с компа, Поставил JDK 10 с сайта Oracle, в комплекте установилось и JRE.
На компе в переменных средах прописал переменную Path- путь к папке bin в JDK, на всякий случай прописал переменную JAVA_HOME — путь к JDK, в Netbeans
— в tools-options- вкладка Java, там во вкладке Ant переменная Classpath- указан путь к JDK, во вкладке Java Shell выбран JDK 10, во вкладке Nashorn так же выбран JDK 10.
Компилируется, запускается с командной строки, всё норм.

Добавлено 09.04.2019, 12:19:

Мле, чуть не забыл- в Netbeance в выпадающем меню Run есть строка SetProjectConfiguration, далее Customize, и там в пункте Source выбираем JDK 10, и Profile- full JRE.
Фух.

А можно где скачать oracle java 8 jdk .А то скачал oracle 8 jre c cайта oracle и в Intellij idea c ней не запускається компилирование програмы.Требует jdk а на сайте oracle для скачывання требует логинится.Только удалось скачать java 12.0.1 jdk последнюю.

Сообщение отредактировал s1a1g1e1r1t — 29.04.19, 21:50

Установка JDK (Java Development Kit)

Для установки JDK на компьютер необходимо:

  1. Загрузить пакет JDK (Java Development Kit)
  2. Установить JDK (Java Development Kit)
  3. Добавить системную переменную JAVA_HOME

В этом уроке описано, как установить JDK на Windows. Для установки JDK на Linux воспользуйтесь этой инструкцией.

Загрузка пакета JDK (Java Development Kit)

Заходим на сайт компании Oracle и скачать файл установки отсюда

На странице загрузки выберите нужную версию Java (для Android Studio требуется версия 7 или 8) и нажмите кнопку загрузки JDK:

В таблице Java SE Development Kit отмечаем согласие с условиями, выбрав пункт Accept License Agreement и загрузите пакет для вашей ОС:

Например, для Windows следует выбрать файл jdk-XuXXX-windows-x64.exe для 64-разрядной (Windows x64) или jdk-XuXXX-windows-i586.exe для 32-разрядной (Windows x86). Разрядность системы, например, в Windows 7 можно узнать так: жмем «Пуск», правой кнопкой мыши «Компьютер», выбираем «Свойства».

Установка пакета JDK (Java Development Kit)

Для установки Java необходимо иметь права администратора (перезагрузить компьютер, если необходимо войти с другой учетной записью). Проверяем, установлена ли Java на компьютере (Пункт «Установка и удаление программ в панели управления Windows») и, если да, то удаляем ее. Запускаем установщик jdk-XuXX-windows-x64.exe. После запуска установщика на экране будут отображаться окна установки, в них лучше ничего не менять, продолжать установку нажатием кнопки Next. В последнем окне нажимаем Close.

Добавляем системную переменную JAVA_HOME

Чтобы было можно компилировать и выполнять программы осталось прописать пути к компилятору Java в переменных среды Windows и перегрузить компьютер. Для этого запускаем Панель управления Windows и выбираем пункт «Система», а в появившемся окне слева — пункт «Дополнительные параметры системы». Откроется окно «Свойства системы», в котором нажимаем кнопку «Переменные среды».

В появившемся окне вам надо создать системную переменную – “JAVA_HOME”. Для этого нажимаем кнопку “Создать”. В поле «Имя переменной» пишем “JAVA_HOME”, а в «Значение переменной» необходимо добавить путь к установленному JDK, а именно путь к его подкаталогу bin, где находится файл компилятора. Если вы ничего не меняли при установке JDK, то путь будет таким: «C:Program FilesJavajdkНомерВерсии». Ниже на картинках приведен пример для версии Java 7.

В системные переменные необходимо добавить путь к установленному JDK

Теперь нужно отредактировать переменную “Path”. Надо ее найти в списке и нажать кнопку “Изменить”. Будьте внимательны – здесь надо в поле «Значение переменной» просто дописать наш путь C:Program FilesJavajdk1.7.0_79bin (для текущей версии java 8, соответственно, jdk1.8.0_121bin ) предварительно поставив “;” в конец уже существующего значения, ничего не удаляя! Пример показан на рисунке.

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

После этого можно проверить корректность установки JDK. Для этого в Windows нажмите «Пуск» и введите команду cmd в поле «Найти программы и файлы», или вызовите окно ввода комбинацией клавиш Windows+R и введите cmd.

В открывшейся консоли наберите java -version и нажмите Enter

В открывшейся консоли наберите java -version и нажмите Enter. Если вы видите версию java, а не сообщение об ошибке, все в порядке.

Установка комплекта разработчика Java Development Kit в ОС Windows

Java является одним из самых распространённых языков программирования во всем мире. Применение данного языка распространяется на различные сферы использования программных продуктов от простых приложений для Android до высоконадёжных серверных приложений.

Данный материал содержит информацию для людей, которые начинают свой путь в программировании и выбрали для написания кода язык программирования(ЯП) Java. У начинающего программиста, который хочет использовать Java, возникает огромная масса вопросов, в том числе, какие действия необходимо предпринять, чтобы написать свой первый программный код. В статье будет пошагово расписан порядок действий по установке комплекта разработчика Java Development Kit в операционных системах семейства Windows.

Давайте кратко рассмотрим, что же из чего же состоит комплект разработчика JDK.

В состав Java Development Kit (JDK) входят технологии, которые необходимы для компиляции и запуска кода, написанного на языке программирования Java:

JVM(Java Virtual Machine) — отвечает за исполнение программного кода, в так называемой виртуальной среде. За счёт использования JVM, язык программирования Java, является одним из самых безопасных ЯП.

JRE(Java Runtime Environment) — предназначается для создания и запуска виртуальной машины JVM, в которой осуществляется работа программного кода.

Многие по незнанию путают два понятия JRE и JDK. Главное отличие JDK от JRE состоит в том, что JRE является лишь набором инструментов для запуска программного кода, а JDK в свою очередь является пакетом для разработки программных продуктов, включающий в свой состав JRE(Java Runtime Environment).

Итак, теперь можно приступить к описанию процесса установки Java Development Kit (JDK), на примере операционной системы Windows 7.

1.Необходимо посетить официальный сайт компании Oracle, с целью загрузки установочного пакета JDK с официальной страницы Java Development Kit .

Перейти на страницу загрузки, нажав кнопку «Download», и выбрать необходимый для скачивания установочный пакет, предварительно приняв Лицензионное соглашение. Для установки в ОС Windows 7, выбираем — jdk-13.0.1_windows-x64_bin.exe .

2. После процесса скачивания установочного пакета JDK, переходим в каталог, в который сохранился скачанный пакет и запускаем файл установки jdk-13.0.1_windows-x64_bin.exe .

3. После запуска файла откроется окно установщика JDK, в котором будет предложено нажать кнопку «Next» для перехода к следующему этапу инсталляции.

4. Следующий этап установки предоставляет пользователю информацию о необходимом свободном пространстве на жёстком диске, необходимым для проведения установки Java SE Development Kit и предлагает выбрать каталог, в который будут скопированы файлы JDK.

5. Далее происходит процесс копирования файлов комплекта разработчика Java Development Kit на жёсткий диск, в указанный пользователем каталог для установки.

6. После завершения копирования всех необходимых файлов, появиться окно, сообщающее о том, что установка Java Development Kit прошла успешно, для завершения необходимо нажать кнопку «Close».

Установка комплекта разработчика Java Development Kit завершена успешно, теперь необходимо произвести небольшие настройки операционной системы, для возможности функционирования JDK. Необходимо будет настроить две переменные среды: JAVA_HOME для указания каталога, где находятся файлы Java и в переменную PATH добавить путь %JAVA_HOME%bin, для указания места, где находятся исполняемые файлы.

Настройка переменных среды, для использования Java.

1. Необходимо открыть свойства компьютера, используя сочетание клавиш Win + Pause , либо воспользоваться меню «Пуск» , выбрать «Компьютер» и нажать правой кнопкой мыши, для вызова контекстного меню, в котором выбрать «Свойства» .

2. Выбрать в меню пункт «Дополнительные параметры системы» .

Java 9 Features and Enhancements

By Lokesh Gupta | Filed Under: Java 9

Java 9 is bringing lots of new enhancements which are going to affect your programming style and habit, in big way. The biggest change is the modularization of Java. It’s another big change after Lambdas in Java 8. In this article, I am listing down changes which will be part of JDK 9 release.

Java platform module system

JPMS (Java Platform Module System) is the core highlight of new Java 9 release. It is also known as Project Jigshaw. A module is new construct like we already have packages. An application, developed using new modular programming, can be seen as collection of interacting modules with a well-defined boundaries and dependencies between those modules.

The JPMS consists of providing support for writing modular applications as well as modularizing the JDK source code as well. JDK 9 is coming with around 92 modules (changes are possible in GA release). Java 9 Module System has a “java.base” Module. It’s known as Base Module. It’s an Independent module and does NOT dependent on any other modules. By default, all other modules are dependent on “java.base”.

In java modular programming-

  1. A module is typically just a jar file that has a module-info.class file at the root.
  2. To use a module, include the jar file into modulepath instead of the classpath . A modular jar file added to classpath is normal jar file and module-info.class file will be ignored.

Typical module-info.java classes looks like this:

Interface Private Methods

Java 8 allowed you to write default methods in interfaces, and it was widely appreciated feature. So after this, interfaces only lack few things and only non-private methods was one of them. Java 9 onward, you are allowed to include private methods in interfaces.

These private methods will improve code re-usability inside interfaces. Foe example, if two default methods needed to share code, a private interface method would allow them to do so, but without exposing that private method to it’s implementing classes.

Using private methods in interfaces have four rules :

  1. Private interface method cannot be abstract.
  2. Private method can be used only inside interface.
  3. Private static method can be used inside other static and non-static interface methods.
  4. Private non-static methods cannot be used inside private static methods.

An example of using private methods in interfaces –

HTTP/2 Client

HTTP/1.1 client was released on 1997. A lot has changed since. So for Java 9 a new API been introduced that is cleaner and clearer to use and which also adds support for HTTP/2. New API uses 3 major classes i.e. HttpClient , HttpRequest and HttpResponse .

To make a request, it is as simple as getting your client, building a request and sending it as shown below.

Above code looks much cleaner and readable.

New API also support Async HTTP requests using httpClient.sendAsync() method. It returns CompletableFuture object which can be used to determine whether the request has been completed or not. It also provide you access to the HttpResponse once request is completed. Best part is that if you desire you can even cancel the request before it completes. e.g.

JShell – REPL Tool

JShell is new command line interactive tool shipped with JDK 9 distribution [JEP 222] to evaluate declarations, statements and expressions written in Java. JShell allows us to execute Java code snippets and get immediate results without having to create a solution or project.

Jshell is much like what we have command window in linux OS. Difference is that JShell is Java specific. It has lots of other capabilities, other than executing simple code snippets. e.g.

  • Launch inbuilt code editor in separate window
  • Launch code editor of your choice in separate window
  • Execute code when Save operation happen in these external editors
  • Load pre-written classes from file system

Platform and JVM Logging

JDK 9 has improved logging in platform classes (JDK classes) and JVM components, through a new loging API. It lets you specify a logging framework of your choice (e.g. Log4J2) as logging backend for logging messages from JDK classes. There are few things you should know about this API:

  1. The API is meant to be used by the classes in the JDK, not by application classes.
  2. For your application code, you will continue using other logging APIs as before.
  3. The API does not let you configure the logger programmatically.

The API consists of the following:

  • A service interface, java.lang.System.LoggerFinder , which is an abstract static class
  • An interface, java.lang.System.Logger , which provides the logging API
  • An overloaded method getLogger() in the java.lang.System class, which returns a logger instance.

JDK 9 also added a new command-line option, -Xlog , that gives you a single point of access to all messages logged from all classes of the JVM. The following is the syntax to use the -Xlog option:

All options are optional. If a preceding part in -Xlog is missing, you must use a colon for that part. For example, -Xlog::stderr indicates that all parts are defaulted, output wich is set as stderr .

I will cover this topic in deep, in a separate post.

Process API Updates

Prior to Java 5, the only way to spawn a new process was to use the Runtime.getRuntime().exec() method. Then in Java 5, ProcessBuilder API was introduced which supported a cleaner way of spawning new processes. Now Java 9 is adding a new way of getting information about current and any spawned process.

To get information of any process, now you should use java.lang.ProcessHandle.Info interface. This interface can be useful in getting lots of information e.g.

  • the command used to start the process
  • the arguments of the command
  • time instant when the process was started
  • total time spent by it and the user who created it

To get the information of a new spawned process, use process.toHandle() method to get ProcessHandle instance. Rest all of things are as above.

Also use ProcessHandle.allProcesses() to get a stream of ProcessHandle of all processes available in system.

To get the list of all child processes (direct as well as n-level deep), use children() and descendants() method.

Collection API Updates

Since Java 9, you can create immutable collections such as immutable list, immutable set and immutable map using new factory methods. e.g.

Stream API Improvements

Java 9 has introduced two new methods to interact with Streams i.e. takeWhile / dropWhile methods. Additionally, it has added two overloaded methods i.e. ofNullable and iterate methods.

The new methods takeWhile and dropWhile allow you to get portions of a stream based on a predicate.

  1. On an ordered stream, takeWhile returns the “longest prefix” of elements taken from the stream that match the given predicate, starting at the beginning of the stream. dropWhile returns the remaining items which were not matched by takeWhile .
  2. On an un-ordered stream, takeWhile returns a subset of the stream’s elements that match the given predicate (but not all), starting at the beginning of the stream. dropWhile returns remaining stream elements after dropping subset of elements that match the given predicate.

Similarily, till Java 8, you cannot have null value in a stream. It would have caused NullPointerException . Since Java 9, Stream.ofNullable() method lets you create a single-element stream which wraps a value if not null , or is an empty stream otherwise. Technically, Stream.ofNullable() is very similar to null condition check, when talking in context of stream API.

Multi-Release JAR Files

This enhancement is related to how you package application classes in jar files. Previously, you had to package all classes into a jar file and drop in the classpath of the another application, which wish to use it.

Using multi-release feature, now a jar can contains different versions of a class – compatible to different JDK releases. The information regarding different versions of a class, and in which JDK version which class shall be picked up by class loaded, is stored in MANIFEST.MF file. In this case, MANIFEST.MF file includes the entry Multi-Release: true in its main section.

Furthermore, META-INF contains a versions subdirectory whose integer-named subdirectories — starting with 9 (for Java 9) — store version-specific class and resource files. e.g.

Let’s assume that in JDK 10, A.class is updated to leverage some Java 10 features, then this Jar file can be updated like this:

It looks really promising step to solve the dependency hell often seen in large application where jars with different versions are not compatible with each other. This feature can be a big help to tackle those scenarios.

@Deprecated Tag Changes

From Java 9, @Deprecated annotation will have two attributes i.e. forRemoval and since .

  1. forRemoval – Indicates whether the annotated element is subject to removal in a future version.
  2. since – It returns the version in which the annotated element became deprecated.

It is strongly recommended that the reason for deprecating a program element be explained in the documentation, using the @deprecated javadoc tag. The documentation should also suggest and link to a recommended replacement API, if applicable. A replacement API often has subtly different semantics, so such issues should be discussed as well.

Stack Walking

The stack is a Last-In-First-Out (LIFO) data structure. At JVM level, a stack stores frames. A new frame is created and pushed to the top of the stack each time a method is invoked. A frame is destroyed (popped out of stack) when the method invocation completes. Each frame on a stack contains its own array of local variables, as well as its own operand stack, return value, and reference to the runtime constant pool of the current method’s class.

In a given thread, only one frame is active at any point. The active frame is known as the current frame and its method is known as the current method . [Read More]

Till Java 8, StackTraceElement represents a stack frame. To get complete stack, you had to use Thread.getStackTrace() and Throwable.getStackTrace() . It returned an array of StackTraceElement which you can iterate to get required information.

In Java 9, a new class StackWalker has been introduced. The class provides easy and efficient stack walking using sequential stream of stack frames for the current thread. The StackWalker class is very efficient because it evaluates the stack frames lazily.

There are other lots of things you can do with this stream, which we will cover in some other decdicated post.

Java Docs Updates

Java 9 enhances the javadoc tool to generate HTML5 markup. It currently generates pages in HTML 4.01.

In order to generate a HTML5 Javadoc, the parameter -html5 needs to go in the command line arguments. To generate the document on the command line, you would run:

Using HTML5 confers the benefits of the easier HTML5 structure. It also implements the WAI-ARIA standard for accessibility. This aims to make it easier for people with physical or visual impairments to access javadocs pages using tools such as screen readers.

JEP 225 gives the ability to search a javadoc for program elements and tagged words and phrases.

The following will be indexed and searchable:

  • Declared names of modules
  • Packages
  • Types and members
  • The simple name of method parameter types

This is implemented client side, with a new search.js Javascript file, along with indexes generated when the javadoc is generated. A search box is available on the generated HTML5 API pages.

Please note that Search option will be added by default, but can be turned off with the argument: -noindex .

Miscellaneous Other Features

There are other features as well in Java 9, which I am listing down here for quick reference. We will discuss all these features in coming posts.

  • Reactive Streams API
  • GC (Garbage Collector) Improvements
  • Filter Incoming Serialization Data
  • Deprecate the Applet API
  • Indify String Concatenation
  • Enhanced Method Handles
  • Compact Strings
  • Parser API for Nashorn
Ссылка на основную публикацию
ВсеИнструменты 220 Вольт
Adblock
detector
×
×