В Java 13 не так много крупных обновлений, которые обычно называют JEP (Java Enhancement Proposal). Вот список JEP, которые были поставлены в новой версии Java:
- Переключение выражений (предварительная версия)
- Текстовые блоки (предварительная версия)
- Повторно реализовать устаревший API сокетов
- Динамические архивы CDS
- ZGC: отменить неиспользуемую память
Скорее всего, первые два обновления будут наиболее интересны большинству Java-разработчиков, так как они вводят новый синтаксис в язык Java.
Переключение выражений (предварительная версия)
Выражения переключения уже были представлены в Java 12. Короче говоря, JEP 325 добавил новую упрощенную форму switch
, которая выглядит следующим образом:
T result = switch (arg) { case L1 -> e1; case L2 -> e2; default -> e3; };
Если вы не знакомы с новым синтаксисом, вот пример:
int result = switch (s) { case "Foo" -> 1; case "Bar" -> 2; default -> throw new IllegalArgumentException("Oops!"); };
В Java 13 добавлено новое ключевое слово yield
a, которое позволяет возвращать значение из блока switch
:
int result = switch (s) { case "Foo" -> 1; case "Bar" -> 2; default -> { System.out.println("Neither Foo nor Bar, hmmm..."); yield 0; } };
Здесь мы видим, что выражение switch
можно использовать для вычисления значения локальной переменной без присвоения значения в каждом case
блоке. Оператор yield
the используется в блоке default
для возврата значения, но его можно использовать и в обычном блоке case
.
Теперь плохие новости. Возможно, вы заметили слово «предварительный просмотр» в названии JEP. Это означает, что новый синтаксис не включен по умолчанию в Java 13. Если вы хотите поиграть с новыми выражениями switch
, вам нужно запустить компилятор Java с параметрами --enable-preview --release 13
, а затем запустить программу с параметром --enable-preview
:
$ javac -d classes --enable-preview --release 13 Test.java $ java -classpath classes --enable-preview Test
Текстовые блоки (предварительная версия)
В Java 13 есть еще одно обновление языка. Именно текстовые блоки помогают определять многострочные строки. Например, фрагмент HTML или запрос SQL часто определяются как многострочная строка в Java. Вот как это обычно выглядит:
String html = "<html>\n" + " <body>\n" + " <p>Hello, world</p>\n" + " </body>\n" + "</html>\n";
Возможно, вы заметили много символов \n
, +
и "
, которые делают код немного длиннее и сложнее для чтения. Некоторые языки программирования, такие как Python, позволяют определять многострочные строки, используя тройные кавычки """
для их начала и конца. Такая языковая функция может помочь сделать код намного лучше. Наконец, в Java 13 появилась такая возможность. Вот как приведенный выше пример можно переписать, используя новые текстовые блоки:
String html = """ <html> <body> <p>Hello, world</p> </body> </html> """;
Во время выполнения приведенная выше строка становится обычным String
(обратите внимание, что пробелы отступа удаляются во время выполнения):
<html> <body> <p>Hello, world</p> </body> </html>
Хотя новые текстовые блоки могут выглядеть простыми, вокруг них довольно много важных тем, таких как разделители строк, отступы, случайные пробелы, escape-последовательности, конкатенация. Вы можете найти все детали в JEP 355.
Изучайте java 13 с обновлениями angular 8 от Обучение Angular в Ченнаи
Остальные
JEP 353 заменяет базовую реализацию API java.net.Socket
и java.net.ServerSocket
. Основная мотивация этого обновления заключалась в том, что старая реализация имеет ряд проблем и плохо вписывается в планы дальнейшего развития Java.
Сокеты Java являются основным компонентом для работы в сети. Если обновление приведет к регрессии, оно затронет многие приложения. К счастью, старую реализацию не удалили. Если что-то пойдет не так, системное свойство jdk.net.usePlainSocketImpl
можно использовать для возврата к старым реализациям. Однако старая реализация и системное свойство будут удалены в одном из следующих выпусков JDK.
Далее JEP 351 представляет новую опцию-XX:ZUncommitDelay
для сборщика мусора Z (ZGC). Параметр сообщает ZGC, когда он должен отменить фиксацию и вернуть память операционной системе.
Наконец, JEP 350 — это обновление для совместного использования данных классов приложений (AppCDS). JEP — совместное использование данных класса приложения, позволяющее динамически архивировать классы в конце выполнения приложения Java.
Вывод
В Java 13 не так уж много JEP. Помимо основных обновлений, новый выпуск Java содержит около 2500 исправлений ошибок и незначительных улучшений. Поскольку новые текстовые блоки и switch
выражений все еще являются предварительными функциями языка, скорее всего, мы не увидим большой разницы после перехода на новую версию Java.