diff --git a/source/_posts/nf-java13.md b/source/_posts/nf-java13.md new file mode 100644 index 0000000..4395a3a --- /dev/null +++ b/source/_posts/nf-java13.md @@ -0,0 +1,82 @@ +--- +title: Java 13的新特性 +tags: + - JVM + - Java + - Java 13 + - 新特性 + - Switch + - 文本块 +categories: + - - JVM + - Java +keywords: 'Java,Java 13,新特性,switch,预览,text,block,文本块' +date: 2021-05-21 17:47:41 +--- + +Java 13是一个新功能比较贫瘠的版本,在Java 13中增加的功能基本上都是预览版功能。 + +本系列的文章有: + +- {% post_link nf-java8 %} +- {% post_link nf-java9 %} +- {% post_link nf-java10 %} +- {% post_link nf-java11 %} +- {% post_link nf-java12 %} +- {% post_link nf-java13 %} +- {% post_link nf-java14 %} +- {% post_link nf-java15 %} +- {% post_link nf-java16 %} + +## 预览功能 + +与之前的Java版本中的预览功能一样,Java 13中的预览功能也必须使用`--enable-preview`选项在编译时手动打开。 + +### Switch表达式 + +Switch表达式是在Java 12中引入的,但是在Java 13中依旧处于预览状态。这里仅展示一下新的switch表达式的用法。 + +```java +var result = switch (operation) { + case "double" -> me * 2; + case "triple" -> { + yield me * 3; + } + default -> me +}; +``` + +按照switch表达式的设计,现在要想实现策略模式已经是非常简单的了。 + +### 文本块 + +文本块(Text Block)是使用三个引号括起来的文本。区别于单个引号括起来的字符串,文本块天然就是多行的。而且更加便利的一条是,可以直接在文本块中书写JSON、XML和HTML等。 + +```java +String webInfo = """ +{ + "name": "FarDawn", + "website": "https://www.archgrid.xyz" +} +""" +``` + +## 动态CDS存档 + +CDS允许在不同的JVM之间共享类的元数据,从而可以缩短程序的启动时间和内存消耗。在Java 13中,生成CDS存档的操作变得简便了许多,只需要在程序退出的时候生成即可,而这个操作只需要在运行程序的Jar包时加一条选项。 + +```bash +java -XX:ArchiveClassesAtExit= -cp app.jar AppName +``` + +使用上面这个命令生成的``可以使用下面这条命令来使用。 + +```bash +java -XX:SharedArchiveFile= -cp app.jar AppName +``` + +## 传统套接字API的新实现 + +传统套接字API,诸如`java.net.Socket`和`java.net.ServerSocket`,在很早之前的Java版本中就已经存在了,而且在近20年中基本上没有发生过任何改变。所以在这个强调线程安全和异步的年代,这些比较古老的API就显得落后了。 + +Java 13中借鉴了`java.nio`的内部结构,重新实现了`Socket`和`ServerSocket`。现在这两个类都已经在使用`java.nio`系列API做底层支持了。 \ No newline at end of file