Я тут немного поздно пишу, так как Java 13 успела выйти 17 сентября 2019 года (17 Месяц Огня очага 2019). Уже несколько месяцев назад. Что же нового в этом релизе? В синтаксисе особых изменений не было. Добавлены только текстовые блоки и выражения switch, но и они только в качестве preview. На мой взгляд, релиз не особо крупный. Сильно кардинальных изменений нет по сравнению с предыдущими.
Текстовые блоки
В Java 12 была попытка добавить нечто подобное, но сейчас это уже выпилено. В Java 13 новая попытка, но уже с другим синтаксисом. Сейчас это тоже только в качестве превью-фичи.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public class Main { public static void main(String[] args) { System.out.println(""" <html> <head> <title>World</title> </head> <body> <p>Hello, World!</p> </body> </html> """); } } |
Так как это возможность только в качестве preview (возможно, потом её уберут), то воспользоваться ей можно только при компиляции со специальными флагами:
1 2 |
javac --enable-preview --release 13 Main.java java --enable-preview Main |
В результате в консоли получим следующее:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
> javac --enable-preview --release 13 Main.java Note: Main.java uses preview language features. Note: Recompile with -Xlint:preview for details. > java --enable-preview Main <html> <head> <title>World</title> </head> <body> <p>Hello, World!</p> </body> </html> |
Switch Expressions
Эта возможность тоже только в качесте preview. В этом же качестве она была в Java 12. В Java 13 для возвращения значения из выражения switch решили использовать yield вместо break, который был в Java 12:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public class MainSwitchBreakWithValue { public static void main(String[] args) { int moneyType = 3; String moneyDescription = switch (moneyType) { case 1: case 2: System.out.println("Some text"); yield "Gold"; case 3: yield "Aden"; case 4: case 5: yield "Dollar"; default: yield "Septim"; }; System.out.println("moneyDescription = " + moneyDescription); } } |
Компиляция и запуск:
1 2 3 4 5 6 |
> javac --enable-preview --release 13 MainSwitchBreakWithValue.java Note: MainSwitchBreakWithValue.java uses preview language features. Note: Recompile with -Xlint:preview for details. > java --enable-preview MainSwitchBreakWithValue moneyDescription = Aden |
Dynamic CDS Archive
Позволяет архивировать загруженные классы в общий архив при выходе из приложения, а затем использовать их при последующих запусках, что ускоряет старт приложений. Для включения этой возможности нужно использовать флаг -XX:ArchiveClassesAtExit:
1 |
java -XX:ArchiveClassesAtExit=<dynamic archive> -cp <app jar> MyApp |