JDK 版本特性演进总结
Java 从 1996 年诞生至今,已经走过了近 30 年。从最初的 Oak 语言到现在的现代化语言,Java 经历了无数次的进化。
我刚学 Java 的时候是 JDK 6,那时候觉得已经很好了。后来 JDK 8 引入了 Lambda,改变了整个 Java 的编程风格。再后来 JDK 21 的虚拟线程,更是并发编程的重大革命。
今天我们就来回顾一下 JDK 8 到 JDK 21 的重要特性。
一、JDK 8(2014年3月)——革命性的版本
1.1 Lambda 表达式
1.2 Stream API
1.3 Optional
1.4 新日期时间 API
1.5 接口默认方法
1.6 其他重要特性
- Nashorn JavaScript 引擎
- Base64 编解码
- ConcurrentHashMap 增强
- Permutation/Combination API
二、JDK 9(2017年9月)——模块化时代
2.1 模块化系统(JPMS)
2.2 私有接口方法
2.3 响应式流(Reactive Streams)
2.4 HTTP/2 Client
2.5 其他特性
- JShell(REPL)
- 改进的 Stream API
- Diamond Operator 扩展
@Deprecated增强
三、JDK 10(2018年3月)——var 类型推断
3.1 局部变量类型推断
3.2 其他特性
- G1 成为默认 GC
- Application Class-Data Sharing
- 线程本地握手
- 增强的垃圾回收接口
四、JDK 11(2018年9月)——LTS 版本
4.1 Lambda 参数的 var
4.2 ZGC(实验性)
4.3 HTTP Client(标准)
4.4 其他特性
- 删除 Java EE 和 CORBA 模块
- String 新增方法:
isBlank(),lines(),strip(),repeat() - Files 新增方法:
readString(),writeString() - 启动单文件程序:
java Hello.java
五、JDK 12-16——快速迭代期
5.1 JDK 12:Switch 表达式(预览)
5.2 JDK 13:文本块(预览)
5.3 JDK 14:Record(预览)
5.4 JDK 15:密封类(预览)
5.5 JDK 16:Record(第二预览)、模式匹配
六、JDK 17(2021年9月)——LTS 版本
6.1 密封类(正式)
6.2 文本块(正式)
6.3 Record(正式)
6.4 其他特性
- 移除 Applet API
- 增强的伪随机数生成器
- 新加密算法支持
- Sealed Classes(正式)
七、JDK 18-20——预览特性积累
7.1 JDK 18:JEP 400(UTF-8 默认)
默认字符集改为 UTF-8。
7.2 JDK 19:虚拟线程(预览)
7.3 JDK 20:结构化并发(预览)
八、JDK 21(2023年9月)——LTS 版本
8.1 虚拟线程(正式)
8.2 结构化并发(正式)
8.3 Record 模式(正式)
8.4 Switch 模式匹配(正式)
8.5 String Templates(预览)
九、JDK 22-23——持续进化
9.1 JDK 22 特性
- unnamed Variables & Patterns
- String Templates(第二预览)
- Stream Gatherers(预览)
- Implicitly Declared Classes and Instance Main Methods
9.2 JDK 23 特性
- Stream Gatherers(第二预览)
- String Templates(第三预览)
- 改进的 Javadoc 注解
十、【直观类比】
【直观类比】
Java 版本演进就像一棵树:
十一、学习路线建议
11.1 必须掌握(JDK 8+)
11.2 进阶特性(JDK 11+)
11.3 新特性(JDK 17+)
十二、面试追问链
第一层:JDK 8 特性
面试官问:"JDK 8 有哪些重要特性?"
Lambda 表达式、Stream API、Optional、新日期时间 API、接口默认方法。其中 Lambda 和 Stream 是最重要的,改变了 Java 的编程风格。
第二层:版本演进
面试官追问:"JDK 8 之后,你用过哪些新特性?"
可以提到 Record、Sealed Class、虚拟线程等。根据实际经验回答。
第三层:预览特性
面试官问:"什么是预览特性?"
预览特性是正式发布前的试验版本,可能会在后续版本中修改或删除。目的是收集反馈,保证正式版本的稳定性。
【学习小结】
- JDK 8:Lambda、Stream、Optional、新日期 API
- JDK 9:模块化、响应式流、私有接口方法
- JDK 10:var 类型推断
- JDK 11:Lambda 参数 var、ZGC(实验)
- JDK 12-16:Switch 表达式、Record、密封类预览
- JDK 17:LTS,密封类、Record、文本块正式
- JDK 21:LTS,虚拟线程、结构化并发正式
- 预览特性 → 正式特性是 Java 的标准演进路径