Skip to content

JDK 11

JDK 11 是继 JDK 8 之后的重要 LTS 版本,提供正式 HTTP Client、单文件源码运行,并移除一批不再属于 JDK 的 Java EE 模块。

标准 HTTP Client

java.net.http 支持 HTTP/1.1、HTTP/2、同步、异步和 WebSocket。

java
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder(URI.create("https://example.com"))
        .GET()
        .build();

HttpResponse<String> response =
        client.send(request, HttpResponse.BodyHandlers.ofString());

异步调用返回 CompletableFuture<HttpResponse<T>>

Lambda 参数中的 var

java
BiFunction<Integer, Integer, Integer> add = (var left, var right) -> left + right;

主要价值是允许给 Lambda 参数添加注解;同一个参数列表不能混用 var、显式类型和省略类型。

常用 API

java
"  ".isBlank();
"a\nb".lines();
"x".repeat(3);
" text ".strip();

Path file = Path.of("message.txt");
Files.writeString(file, "hello");
String text = Files.readString(file);

Predicate<String> notBlank = Predicate.not(String::isBlank);

还包括 Optional.isEmpty()、集合 toArray(IntFunction<T[]>) 等增强。

单文件源码运行

bash
java Hello.java

适合脚本、演示和小工具;它不是完整项目构建系统的替代品。

JVM 与安全

特性说明
Flight RecorderJFR 开源并进入 OpenJDK,适合低开销生产诊断
ZGC作为实验性低延迟 GC 引入
Epsilon GC只分配、不回收内存,用于性能实验和短生命周期任务
TLS 1.3JSSE 支持 TLS 1.3
Nest-Based Access Control改善嵌套类之间的私有成员访问

移除与弃用

  • 移除 Java EE 与 CORBA 模块,包括 JAXB、JAX-WS、Activation、Common Annotations 等;应用需要添加独立依赖。
  • 移除 JavaFX、Java Mission Control 等与 JDK 一起分发的组件。
  • Nashorn JavaScript 引擎和 Pack200 标记为待移除。

从 JDK 8 升级

  1. 先升级 Maven/Gradle、测试框架、字节码工具和应用框架。
  2. 使用 jdeps 检查内部 API 与缺失模块依赖。
  3. 显式补充 JAXB 等依赖。
  4. 检查反射警告、GC 参数、TLS 和字体/时区差异。