Java 9 ← 2017, 2019 Java → 13, что случилось?

Java

До конца 2019 года осталось всего 30 дней. Вы готовы к 2020 году?

В конце года людям особенно легко погружаться в воспоминания и сравнения, например, в эти несколько дней горит челлендж сравнения!

Эта тема была в горячем списке поиска Weibo, а также взорвала круг друзей, люди выкладывали свои фотографии, сравнивая 2017 и 2019 годы.

В качестве техники я также сделал контраст:

21-ое сентября 2017 года, Java 9 официально выпущено, а в августе 2017 года Исполнительный комитет ОАО «Исполнительный комитет JCP» до частоты выпуска Java до двух шесть месяцев, новый цикл выпуска строго следуют точке времени, ежегодно выпускают 3 и сентябрь.

Сравнение предыдущих JDK

Java 9 был официально выпущен 22 сентября 2017 года, привнеся множество новых функций, главной из которых является уже реализованная модульная система.

Основные характеристики:

  • Модульная система: модуль — это контейнер пакетов, и одним из самых больших изменений в Java 9 является введение модульной системы (проект Jigsaw).
  • Клиент HTTP 2: стандарт HTTP/2 — это последняя версия протокола HTTP, а новый API-интерфейс HTTPClient поддерживает функции потоковой передачи WebSocket и HTTP2, а также функции push-уведомлений сервера.
  • Улучшенный Javadoc: Javadoc теперь поддерживает поиск в документации API. Кроме того, выходные данные Javadoc теперь совместимы с HTML5.
  • Фабричные методы коллекций: в интерфейсах List, Set и Map новые статические фабричные методы могут создавать неизменяемые экземпляры этих коллекций.
  • Приватные методы интерфейса: используйте приватные приватные методы в интерфейсе. Мы можем написать приватные методы в интерфейсе, используя модификатор приватного доступа.
  • Улучшенный Stream API: улучшенный Stream API добавляет удобные методы, упрощающие обработку потоков и создание сложных запросов с использованием сборщиков.
  • Улучшите попытку с ресурсами: если у вас уже есть ресурс, который является окончательным или эквивалентен финальной переменной, вы можете использовать эту переменную в инструкции попытки с ресурсами без объявления новой переменной в инструкции попытки с ресурсами.
  • Улучшенная аннотация устаревшего @Deprecated: аннотация @Deprecated может помечать состояние API Java, что может указывать на то, что помеченный API будет удален или поврежден.
  • Улучшенный необязательный класс: java.util.Optional добавляет много новых полезных методов. Необязательный можно напрямую преобразовать в поток.
  • API Reactive Streams: новый API Reactive Streams был представлен в Java 9 для поддержки реактивного программирования в Java 9.

Официально выпущенный 21 марта 2018 года, Java 10 является десятым основным выпуском языка Java, одного из наиболее широко используемых сегодня языков программирования.

Основные характеристики:

  • Вывод типа локальной переменной (вывод типа локальной переменной): используйте ключевое слово var для объявления переменной, которая может вывести тип переменной.
  • Parallel Full GC for G1 (Параллельный полный сборщик мусора для G1): параллельная полная сборка мусора сборщиком мусора G1, реализующая параллелизм для уменьшения задержки в наихудшем случае.
  • Совместное использование данных классов приложений: совместное использование данных классов приложений (AppCDS) сокращает объем памяти и время запуска за счет совместного использования общих метаданных классов между процессами.
  • Локальные рукопожатия потока: выполнение обратных вызовов для потоков без входа в глобальную точку безопасности JVM. Вместо того, чтобы останавливать все потоки или ни один из них, оптимизация может остановить только один поток.

Java 11 был официально выпущен 25 сентября 2018 года и готов к использованию в продакшене! Это первый выпуск с долгосрочной поддержкой после Java 8, который будет поддерживаться до 2026 года.

Основные характеристики:

  • ZGC, масштабируемый сборщик мусора с малой задержкой (ZGC: масштабируемый сборщик мусора с низкой задержкой): ZGC — это сборщик мусора, который утверждает, что гарантирует, что время паузы каждого GC не превышает 10 мс, и совместим с текущим сборщиком мусора по умолчанию. По сравнению с G1 пропускная способность падает не более чем на 15%.
  • Epsilon: сборщик мусора без операций: это сборщик мусора, который не занимается сборкой мусора. Этот сборщик мусора не кажется полезным, он в основном используется для тестирования производительности, проверки нагрузки на память и т. д. Epsilon GC может использоваться в качестве контрольной группы для измерения производительности других сборщиков мусора.
  • Расширенное использование var (синтаксис локальных переменных для параметров лямбда): в Java 11 var можно использовать как объявление локальной переменной в лямбда-выражении.

Java 12 была официально выпущена 19 марта 2019 г., еще одно обновление версии через полгода после выпуска Java 11, версия с долгосрочной поддержкой.

Основные характеристики:

  • Shenandoah: сборщик мусора с малым временем паузы (экспериментальный): добавлен алгоритм Shenandoah для сокращения времени паузы GC за счет выполнения очистки одновременно с выполнением потоков Java.
  • Switch Expressions: расширяет оператор switch, чтобы его можно было использовать не только как оператор, но и как выражение.
  • Прерываемый смешанный сборщик мусора G1 (отключаемый сбор смешанных сборов для G1) G1 Незамедлительно возвращает неиспользуемую выделенную память из G1: Сделайте смешанный сборщик мусора G1 прерываемым, если существует вероятность того, что целевое значение паузы будет превышено.

Java 13 был официально выпущен 17 сентября 2019 года, и в этом выпуске были представлены такие функции, как текстовые блоки.

Основные характеристики:

  • Расширить классы приложений — совместное использование данных (динамические архивы CDS): разрешить динамическое архивирование классов в конце выполнения приложения Java. Архивные классы будут включать в себя все загруженные классы приложений и библиотек, которых нет в архиве CDS базового уровня по умолчанию (класс совместного использования данных).
  • Расширение ZGC для возврата неиспользуемой памяти кучи в операционную систему (ZGC: Uncommit Unused Memory): ZGC может возвращать неиспользуемую память кучи в операционную систему.
  • Готовые к производству выражения переключения (Switch Expressions): оператор yield был введен в блоки переключателей для возвращаемых значений.
  • Добавление текстовых блоков в язык Java (текстовые блоки): вводит многострочные строковые литералы, в которых многострочные строки могут быть размещены без какого-либо экранирования.

Какие функции меняют способ написания кода?

1. Вывод типа локальной переменной

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

MyObject value = new MyObject();
List list = new ArrayList();

В Java 10 вы можете определять такие объекты:

var value = new MyObject();
var list = new ArrayList();

Как видите, вывод типа локальной переменной вводит ключевое слово «var» без необходимости явно указывать тип переменной.

переключить выражение

Выражения переключения были представлены в качестве функции предварительного просмотра в JDK 12. Эта функция была снова изменена в Java 13, где появился оператор yield для возвращаемых значений. Это означает, что выражения switch (возвращающие значение) должны использовать yield, а операторы switch (не возвращающие значения) должны использовать break.

Раньше возвращать содержимое в switch было довольно проблематично, общий синтаксис выглядит следующим образом:

int i;
switch (x) {
    case "1":
        i=1;
        break;
    case "2":
        i=2;
        break;
    default:
        i = x.length();
        break;
}

Используйте следующий синтаксис в JDK13:

int i = switch (x) {
    case "1" -> 1;
    case "2" -> 2;
    default -> {
        int len = args[1].length();
        yield len;
    }
};

или

int i = switch (x) {
    case "1": yield 1;
    case "2": yield 2;
    default: {
        int len = args[1].length();
        yield len;
    }
};

3. Поддержка текстового блока

Текстовый блок, текстовый блок, представляет собой многострочный строковый литерал, который позволяет избежать необходимости в большинстве escape-последовательностей, автоматически форматирует строку предсказуемым образом и дает разработчику контроль над форматированием, когда это необходимо.

Мы привыкли копировать текстовую строку извне в Java, она будет автоматически экранирована, если есть следующая строка:

 <html>
  <body>
      <p>Hello, world</p>
  </body>
</html>

Скопированный в строку Java, он отобразит следующее:

"<html>\n" +
"    <body>\n" +
"        <p>Hello, world</p>\n" +
"    </body>\n" +
"</html>\n";

То есть она автоматически экранируется. Такая строка кажется не очень интуитивной. В JDK 13 можно использовать следующий синтаксис:

"""
<html>
  <body>
      <p>Hello, world</p>
  </body>
</html>
""";

Используйте """ в качестве начала и конца текстового блока, и вы можете размещать в нем многострочные строки без экранирования. Это выглядит очень освежающе.

позже

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

Прошло 2 года, продвинулись ли вы на пути изучения Java? Добро пожаловать, чтобы рассказать о ваших изменениях за последние два года.

Об авторе: Холлис, человек с уникальным увлечением программированием, технический эксперт интернет-компании, блогер по персональным технологиям, технические статьи читают десятки миллионов человек по всей сети, соавтор «Трех курсов для программистов». ".