--- 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做底层支持了。