До конца 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? Добро пожаловать, чтобы рассказать о ваших изменениях за последние два года.
Об авторе: Холлис, человек с уникальным увлечением программированием, технический эксперт интернет-компании, блогер по персональным технологиям, технические статьи читают десятки миллионов человек по всей сети, соавтор «Трех курсов для программистов». ".