JDK13新特性
1. Switch Expressions(标准版)(JEP 354)
在JDK 12中作为预览功能引入后,Switch Expressions在JDK 13中成为正式特性,允许在switch语句中使用yield返回值。
public class SwitchExpressions {
public static String dayInfo(int day) {
return switch (day) {
case 1, 2, 3, 4, 5 -> "工作日";
case 6, 7 -> "周末";
default -> throw new IllegalArgumentException("无效的天数: " + day);
};
}
public static void main(String[] args) {
System.out.println(dayInfo(6));
}
}
2. Text Blocks(预览版)(JEP 355)
引入了多行文本块,使得编写字符串字面量更加方便,特别是对于JSON、HTML等格式的文本。
public class TextBlocks {
public static void main(String[] args) {
String html = """
<html>
<body>
<p>Hello, world!</p>
</body>
</html>
""";
System.out.println(html);
}
}
3. Dynamic CDS Archives(JEP 350)
允许在Java应用程序执行结束时动态归档类,以扩展应用程序类数据共享(CDS)。
java -Xshare:dump
4. ZGC: Uncommit Unused Memory(JEP 351)
Z Garbage Collector(ZGC)的新特性,允许它在不再需要时释放未使用的内存页给操作系统。
5. Reimplement the Legacy Socket API(JEP 353)
重新实现了遗留的Socket API,提高了性能和可维护性。
import java.io.*;
import java.net.*;
public class SocketExample {
public static void main(String[] args) throws IOException {
try (Socket socket = new Socket("example.com", 80)) {
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out.println("GET / HTTP/1.1");
out.println("Host: example.com");
out.println();
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();
}
}
}
6. Unicode 12.1支持
更新了对Unicode标准的支持,包括新增字符和表情符号。
public class UnicodeExample {
public static void main(String[] args) {
System.out.println("\uD83E\uDD73"); // 展示一个Unicode 12.1中的表情符号
}
}