Java 11 新特性 (EOL)
生命周期结束时间(EOL): 2023/09/14
目前 OpenJDK 11 仍处于 LTS 状态
官方发布介绍页面:https://openjdk.org/projects/jdk/11/
1. var 用于 lambda 表达式
在 lambda 表达式中可以使用 var 来声明参数。
List<String> list = List.of("a", "b", "c");
list.forEach((var item) -> System.out.println(item));
2. 新的字符串方法
JDK 11 为 String 类添加了几个新方法。
// isBlank
System.out.println(" ".isBlank()); // true
// lines
String str = "Hello\nWorld";
str.lines().forEach(System.out::println);
// strip
System.out.println(" Hello ".strip()); // "Hello"
// repeat
System.out.println("Hello".repeat(3)); // "HelloHelloHello"
3. Optional 类的新方法
Optional 类增加了 isEmpty 方法。
Optional<String> optional = Optional.empty();
System.out.println(optional.isEmpty()); // true
4. HttpClient 标准化
新的 HttpClient API 在 JDK 11 中标准化。
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
5. 文件方法增强
Files 类增加了几个新方法。
Path path = Paths.get("test.txt");
// writeString
Files.writeString(path, "Hello, World!");
// readString
String content = Files.readString(path);
System.out.println(content);
// isSameFile
Path path2 = Paths.get("test.txt");
System.out.println(Files.isSameFile(path, path2)); // true
6. 局部变量语法用于 lambda 表达式
允许在 lambda 表达式中使用局部变量语法。
List<String> list = List.of("a", "b", "c");
list.forEach((var item) -> System.out.println(item));
7. 垃圾回收器改进
引入了新的垃圾回收器 ZGC 和 Epsilon。
// 使用命令行参数来启用 ZGC
// -XX:+UseZGC
// 使用命令行参数来启用 Epsilon
// -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC
8. 单文件源代码程序
可以直接运行单文件源代码程序。
# 直接运行单文件源代码程序
java HelloWorld.java
9. Flight Recorder
JDK 11 引入了 Flight Recorder,用于收集和分析 JVM 性能数据。
# 启用 Flight Recorder
java -XX:StartFlightRecording=duration=60s,filename=myrecording.jfr -jar myapp.jar
10. 动态类文件常量
引入了动态类文件常量,允许在运行时生成常量池条目。
// 示例代码无法直接展示动态类文件常量的效果
11. 移除的包和不推荐使用的功能
对于Java EE和CORBA模块在Java 9开始就不推荐使用了。而从Java 11开始正式删除了这部分内容,所以当升级到Java 11或更高的版本的话,务必要先更急以下内容相关的代码:
移除的包:
java.xml.ws (JAX-WS)
java.xml.bind (JAXB)
java.activation (JAF)
java.xml.ws.annotation (Common Annotations)
java.corba (CORBA)
java.transaction (JTA)
java.se.ee (以上6个模块的聚合模块)
移除的工具:
wsgen and wsimport (from jdk.xml.ws)
schemagen and xjc (from jdk.xml.bind)
idlj, orbd, servertool, and tnamesrv (from java.corba)