blog/source/_posts/nf-java13.md
2021-05-21 17:47:56 +08:00

82 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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中增加的功能基本上都是预览版功能。<!-- more -->
本系列的文章有:
- {% 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=<archive file> -cp app.jar AppName
```
使用上面这个命令生成的`<archive file>`可以使用下面这条命令来使用。
```bash
java -XX:SharedArchiveFile=<archive file> -cp app.jar AppName
```
## 传统套接字API的新实现
传统套接字API诸如`java.net.Socket`和`java.net.ServerSocket`在很早之前的Java版本中就已经存在了而且在近20年中基本上没有发生过任何改变。所以在这个强调线程安全和异步的年代这些比较古老的API就显得落后了。
Java 13中借鉴了`java.nio`的内部结构,重新实现了`Socket`和`ServerSocket`。现在这两个类都已经在使用`java.nio`系列API做底层支持了。