Java 11 LTS版本
2026/1/15大约 3 分钟JavaJava版本特性LTSJavaJava新特性LambdaStreamOptional模块化虚拟线程
概述
Java 11(2018年9月)是继 Java 8 之后的第二个 LTS(长期支持)版本,也是目前企业应用最广泛的版本之一。
字符串增强
// isBlank - 判断是否为空白
"".isBlank(); // true
" ".isBlank(); // true
" a ".isBlank(); // false
// strip - 去除首尾空白(支持 Unicode 空白字符)
" hello ".strip(); // "hello"
" hello ".stripLeading(); // "hello "
" hello ".stripTrailing(); // " hello"
// strip vs trim
// trim 只去除 ASCII 空白字符(<= U+0020)
// strip 去除所有 Unicode 空白字符
// lines - 按行分割
"line1\nline2\nline3".lines()
.forEach(System.out::println);
// repeat - 重复字符串
"ab".repeat(3); // "ababab"文件读写增强
// 读取文件为字符串
String content = Files.readString(Path.of("file.txt"));
// 写入字符串到文件
Files.writeString(Path.of("file.txt"), "Hello, World!");
// 指定字符集
Files.writeString(Path.of("file.txt"), "你好", StandardCharsets.UTF_8);集合转数组
List<String> list = List.of("a", "b", "c");
// Java 11 之前
String[] array1 = list.toArray(new String[0]);
String[] array2 = list.toArray(new String[list.size()]);
// Java 11 之后
String[] array3 = list.toArray(String[]::new);Optional 增强
Optional<String> optional = Optional.empty();
// isEmpty - 判断是否为空
if (optional.isEmpty()) {
System.out.println("Optional is empty");
}
// 与 isPresent 相反
optional.isPresent(); // false
optional.isEmpty(); // trueLambda 参数的 var
// 可以在 Lambda 参数中使用 var
// 主要用于添加注解
(@NotNull var x, @Nullable var y) -> x + y
// 等价于
(String x, String y) -> x + yHTTP Client (正式版)
Java 11 正式发布了 HTTP Client API,支持 HTTP/2 和 WebSocket。
同步请求
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.example.com/users"))
.header("Content-Type", "application/json")
.GET()
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println("Status: " + response.statusCode());
System.out.println("Body: " + response.body());异步请求
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.example.com/users"))
.build();
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join();POST 请求
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.example.com/users"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(
"{\"name\":\"John\",\"age\":30}"))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());配置 HttpClient
HttpClient client = HttpClient.newBuilder()
.version(HttpClient.Version.HTTP_2)
.connectTimeout(Duration.ofSeconds(10))
.followRedirects(HttpClient.Redirect.NORMAL)
.proxy(ProxySelector.of(new InetSocketAddress("proxy.example.com", 8080)))
.authenticator(Authenticator.getDefault())
.build();运行单文件源代码
# 直接运行 Java 源文件,无需先编译
java HelloWorld.java
# 带参数
java HelloWorld.java arg1 arg2
# Shebang 脚本(Unix/Linux)
#!/usr/bin/java --source 11
public class Script {
public static void main(String[] args) {
System.out.println("Hello from script!");
}
}Epsilon 垃圾回收器
一个"无操作"的垃圾回收器,不进行任何垃圾回收,用于性能测试和短生命周期应用。
java -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC MyAppZGC (实验性)
低延迟垃圾回收器,目标是将 GC 停顿时间控制在 10ms 以内。
java -XX:+UnlockExperimentalVMOptions -XX:+UseZGC MyAppFlight Recorder
Java Flight Recorder 开源,用于收集 JVM 运行时数据。
# 启动时开启
java -XX:StartFlightRecording=duration=60s,filename=recording.jfr MyApp
# 运行时开启
jcmd <pid> JFR.start duration=60s filename=recording.jfr移除的特性
Java EE 和 CORBA 模块
以下模块被移除:
java.xml.ws(JAX-WS)java.xml.bind(JAXB)java.activation(JAF)java.xml.ws.annotation(Common Annotations)java.corba(CORBA)java.transaction(JTA)
需要单独添加依赖:
<!-- JAXB -->
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>3.0.0</version>
</dependency>JavaFX
JavaFX 从 JDK 中分离,需要单独下载。
Nest-Based Access Control
嵌套类可以直接访问彼此的私有成员,无需编译器生成桥接方法。
public class Outer {
private int value = 10;
class Inner {
void access() {
// 直接访问外部类私有成员
System.out.println(value);
}
}
}总结
| 特性 | 说明 |
|---|---|
| 字符串增强 | isBlank、strip、lines、repeat |
| 文件读写 | readString、writeString |
| HTTP Client | 支持 HTTP/2、异步请求 |
| 单文件运行 | java HelloWorld.java |
| Lambda var | Lambda 参数支持 var |
| ZGC | 低延迟垃圾回收器(实验性) |
| Flight Recorder | JVM 运行时数据收集 |
Java 11 作为 LTS 版本,是从 Java 8 升级的理想选择,提供了许多实用的 API 改进和性能优化。
