Что нового в Java 11

Даёшь пятилетку за полгода!

Давно прошли времена, когда релиза новой версии Java приходилось ждать годами. Теперь новые версии выходят раз в полгода. Буквально пару дней назад появилась Java 11. Официальная документация по этой версии доступна на сайте Oracle. Что же в ней нового? Давайте рассмотрим нововведения в Java 11, и как они смогут облегчить или отяжелить нашу жизнь.

Все примеры ниже были проверены в JShell.

Содержание

Новые методы java.lang.String в Java 11
Var в лямбда-выражениях
Запуск программ, состоящих из одного файла
HttpClient стал частью стандарта Java 11
Удалены устаревшие методы из java.lang.Thread
В java.nio.file.Files добавлены новые методы
В java.util.function.Predicate добавлен метод not
Epsilon Garbage Collector
Сборщик мусора ZGC
Поддержка Unicode 10
Изменение лицензии
Полезные статьи

Новые методы java.lang.String в Java 11

В Java раньше был метод trim, который убирал пробелы слева и справа в строке, но у него была проблема в том, что он убирал только пробелы. В Java 11 добавили новый метод strip, который возвращает строку, в которой убраны все невидимые символы в левой и правой частях строки. Невидимые символы в методе strip определяются с помощью Character.isWhitespace(char):

Также существуют аналогичные методы для удаления невидимых символов в левой части строки и в правой части строки:

Примеры использования:

Также в Java 11 в классе String появилась отличная функция из isBlank, которая возвращает true, если строка пуста или состоит только из пробельных символов. Пробельные символы проверяются через Character.isWhitespace(int). (похоже, что её скопировали из StringUtils в Apache Commons):

Так как начиная с Java 9 у нас строки делятся на те, что содержат только латинские символы, и на те, которые содержат символы других алфавитов, то внутри isBlank у нас две реализации: одна для строк с только латинскими символами, а вторая для строк с другими символами.

В Java 11  в класс строки также был добавлен метод repeat, который возвращает строку, содержащую исходную строку указанное количество раз:

Даёшь stream-ы в массы! В класс java.lang.String в Java 11 был добавлен новый метод lines(), который возвращает все строки (разделённые символом перевода строки \r или \n  или \r\n) в Stream:

Var в лямбда-выражениях

В Java 10 был добавлен вывод типа с помощью var. Начиная с Java 11 var можно использовать и в лямбда выражениях. Например, раньше было:

Теперь можно писать так:

В таком виде от нашего var пользы, конечно, не очень много. Основная польза в том, что теперь мы можем применять аннотации к лямбда-параметрам, что раньше было недоступно из-за отсутствия типа:

Запуск программ, состоящих из одного файла

В Java 11 стало гораздо проще запускать программы, состоящие только из одного файла. Раньше последовательность действий была такой:

Теперь достаточно одной команды:

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

Если же нам нужно передать какие-нибудь аргументы, то аргументы JVM мы можем указать перед именем файла, а аргументы самой программы нужно указывать после имени файла.

HttpClient стал частью стандарта Java 11

До Java 9 Apache HttpClient была фактически стандартной библиотекой для отправки HTTP-запросов. В Java 9 HttpClient был включён в библиотеки, но только как модуль инкубатора. Начиная с Java 11 HttpClient является частью стандартных библиотек. Больше не нужно для этого подключать внешние зависимости. Сам HttpClient находится в пакете java.net.http.

Пример:

Удалены устаревшие методы из java.lang.Thread

В Thread (который я когда-то описывал в статье про многопоточность в Java) уже давно болтаются устаревшие методы  destroy() и stop(Throwable). Теперь они удалены.

В java.nio.file.Files добавлены новые методы

В java.nio.file.Files  (я уже как-то описывал его в статье про NIO 2) добавлены методы для чтения содержимого файла в строки и для записи файла из строки.

Читает содержимое файла в строку. Файл расценивается, как содержащий текст в кодировке UTF-8.

 

Читает содержимое файла по пути path в строку в указанной кодировке.

 

Записывает последовательность символов csq в файл в кодировке UTF-8.

 

 Записывает последовательность символов в файл с указанной кодировкой.

 

Пример использования:

 

В java.util.function.Predicate добавлен метод not

Возвращает предикат, который является отрицанием исходного:

Epsilon Garbage Collector

Новый сборщик мусора. Я уже описывал некоторые из сборщиков мусора, которые существовали до этого ( Parallel GC, Serial GC, G1). Теперь ещё есть Epsilon Garbage Collector, который на самом деле не собирает мусор. По сути он не делает ничего. Предполагается использовать для замеров влияния сборщиков мусора на выполнение программы.

Сборщик мусора ZGC

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

Поддержка Unicode 10

Добавлена поддержка Unicode 10, который включает в себя символ биткоина и много других полезных символов.

Учтите, что начиная с Java 9 мы можем использовать символы Unicode в Properties-файлах, а значит, что мы теперь можем использовать в них символ биткоина.

Пример, записывающий символ биткоина в текстовый файл:

Изменение лицензии

Имейте в виду, что использовать бесплатно скачанную версию с сайта oracle версию JDK 11 можно только при разработке, тестировании и демонстрации. Для использования в продакшене нужно либо иметь коммерческую лицензию, либо использовать Open JDK 11.

Полезные статьи

Учебник Java 8

Java 9 нововведения

Что нового в Java 10

Что нового в Java 11: 5 комментариев

  1. > Даёшь stream-ы в массы! В класс java.lang.String в Java 11 был добавлен новый метод lines()
    Нубы!!!!
    Разучились split делать????

  2. > Имейте в виду, что использовать бесплатно скачанную версию с сайта oracle версию JDK 11 можно только при разработке, тестировании и демонстрации. Для использования в продакшене нужно либо иметь коммерческую лицензию, либо использовать Open JDK 11.

    А что, раньше можно было для коммерции всё это скачивать бесплатно???

    1. Да, можно было. Лицензия поменялась именно с 11 версии
      https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html

      Important changes in Oracle JDK 11 License

      With JDK 11 Oracle has updated the license terms on which we offer the Oracle JDK.
      The new Oracle Technology Network License Agreement for Oracle Java SE is substantially different from the licenses under which previous versions of the JDK were offered. Please review the new terms carefully before downloading and using this product.

      Oracle also offers this software under the GPL License on jdk.java.net/11

      https://www.oracle.com/technetwork/java/javase/terms/license/javase-license.html

      Further, You may not:
      — use the Programs for any data processing or any commercial, production, or internal business purposes other than developing, testing, prototyping, and demonstrating your Application;

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *