JDK 11、17有哪些新特性?
1 个回答
请优先考虑优先考虑你的人。柳如烟JDK 11 和 JDK 17 都是 **长期支持版本(LTS)**,在企业中应用广泛。以下是它们的主要新特性对比,便于你快速掌握每个版本的核心价值: ## JDK 11 新特性(LTS,发布于 2018) ### 1. `var` 支持 lambda 参数推断(JEP 323) ```java list.forEach((var item) -> System.out.println(item)); ``` ### 2. 新增常用字符串方法 * `isBlank()` * `lines()` * `strip() / stripLeading() / stripTrailing()` * `repeat(int count)` ```java "abc ".strip(); // 去除前后空白 "abc".repeat(3); // abcabcabc ``` ### 3. 新的 HTTP Client API(标准化,JEP 321) ```java HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://example.com")) .build(); HttpResponse<String> response = client.send(request, BodyHandlers.ofString()); ``` ### 4. 支持运行 `.java` 文件无需编译 ```bash $ java Hello.java ``` ### 5. 本地变量语法 `var` 在 JDK 10 引入,JDK 11 扩展了其适用范围。 ### 6. 移除/弃用旧模块 * 移除 Java EE 和 CORBA 模块(如 `javax.xml.bind`) * 删除 `javafx`、`javaws`、Applets ## JDK 17 新特性(LTS,发布于 2021) ### 1. `sealed` 类与接口(JEP 409) 限定子类,控制继承范围,提升安全性和可维护性。 ```java public sealed class Shape permits Circle, Rectangle {} public final class Circle extends Shape {} public final class Rectangle extends Shape {} ``` ### 2. Switch 增强(JEP 406) 支持表达式和模式匹配(简化代码结构) ```java String result = switch (day) { case MONDAY -> "Start"; case FRIDAY -> "End"; default -> "Mid"; }; ``` ### 3. `record` 类(JEP 395) 快速定义只读数据对象(类似 Lombok 的 @Data) ```java public record User(String name, int age) {} ``` ### 4. 文本块 Text Blocks(JEP 378) 多行字符串简化书写(早期在 JDK 13/14 引入,JDK 17 正式) ```java String json = """ { "name": "Tom", "age": 18 } """; ``` ### 5. Pattern Matching for instanceof(JEP 394) 简化类型判断和强转 ```java if (obj instanceof String s) { System.out.println(s.toLowerCase()); } ``` ### 6. 更强的垃圾回收支持 * 默认使用 **G1 GC** * 支持 **ZGC** 和 **Shenandoah**,更低延迟 ## 总结对比表 | 特性类别 | JDK 11 | JDK 17 | | ----------------- | ------ | ---------------------- | | 字符串增强 | ✅ | ✅ | | `var` 推断扩展 | ✅ | — | | 新 HTTP 客户端 | ✅ | — | | 模块移除(如 JavaEE) | ✅ | — | | `record` 语法 | — | ✅ | | `sealed` 类 | — | ✅ | | Switch 表达式 | — | ✅ | | `instanceof` 模式匹配 | — | ✅ | | 文本块 | — | ✅ | | GC 优化 | G1 默认 | G1 + ZGC/Shenandoah 支持 | | LTS | ✅ | ✅ | ## 建议选用 JDK 17 的理由: * 更现代的语法(sealed、record、pattern matching) * 性能更优,GC 更可控 * 更强的语言表达能力,代码更简洁 * **当前 Oracle、OpenJDK 推荐生产使用版本**编辑于 2025-07-28 20:01 •IP属地 北京举报评论收藏
公众号进入网站体验更佳

