Java 8 到 21 核心新特性概览
大部分团队还在用 Java 8,但 Java 已经迭代到 21 了。本文聚焦互联网后端开发最实用的 10 个新特性,每个都包含代码示例。
一、Lambda 与 Stream(Java 8)
- 1.1 Lambda 表达式的语法与函数式接口
- 1.2 Stream 的 map/filter/reduce 操作
- 1.3 Collectors 常用方法
- 1.4 并行 Stream 的适用条件
二、Optional——消灭 NullPointerException(Java 8)
- 2.1
of()/ofNullable()/empty() - 2.2
map()/flatMap()/orElse()/orElseGet() - 2.3
orElseThrow()的使用 - 2.4 Optional 的误用——不要用作字段类型
三、新的日期时间 API(Java 8)
- 3.1
LocalDate/LocalTime/LocalDateTime - 3.2
Instant时间戳 - 3.3
ZonedDateTime时区处理 - 3.4
Duration与Period - 3.5 与旧
Date/Calendar的对比
四、var 本地变量类型推断(Java 10)
- 4.1
var list = new ArrayList<String>() - 4.2 使用限制——不能用于字段、方法参数、返回类型
- 4.3 var 的可读性争议
五、新的 HTTP Client(Java 11)
- 5.1
HttpClient替代HttpURLConnection - 5.2 同步与异步请求
- 5.3 HTTP/2 支持
六、Switch 表达式(Java 14)
- 6.1 箭头语法——
case X -> - 6.2
yield返回值
七、Record 类(Java 16)
- 7.1 不可变数据载体
- 7.2 自动生成构造器、getter、equals、hashCode、toString
- 7.3 与 Lombok @Data 的对比
八、Sealed Classes(Java 17)
- 8.1 限制继承的密封类
- 8.2 与模式匹配的结合
九、模式匹配 for instanceof(Java 16)
- 9.1
if (obj instanceof String s)一步完成类型判断和转换 - 9.2 与旧写法的对比
十、虚拟线程 Virtual Threads(Java 21)
- 10.1 平台线程 vs 虚拟线程
- 10.2
Thread.ofVirtual().start() - 10.3 虚拟线程如何解决阻塞式 IO 的性能问题
- 10.4 与传统线程池的对比
- 10.5 生产环境注意事项——不要池化虚拟线程
十一、升级建议
- 从 Java 8 升级到 Java 17/21 的步骤
- 常见的兼容性问题与解决方案
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 谜思录!