Java的官方版本
Java的官方版本由Sun Microsystems(现Oracle)发布,主要遵循Java Platform, Standard Edition (Java SE) 的版本命名。以下是主要版本及其关键变化:
-
早期版本
- JDK 1.0 (1996年):首个正式版本。
- JDK 1.1 (1997年):引入内部类、JDBC等。
-
Java 2 平台
- J2SE 1.2 (1998年):品牌更名为“Java 2”,包含Swing、集合框架等。
- J2SE 1.3 (2000年):优化性能,引入JNDI、Java Sound。
- J2SE 1.4 (2002年):新增正则表达式、NIO、日志API等。
-
Java SE 5 (1.5) (2004年)
- 版本号简化,直接称为Java 5(内部版本1.5)。引入泛型、注解、自动装箱等。
-
Java SE 6 (1.6) (2006年)
- 移除“J2SE”前缀,更名为Java SE 6(内部版本1.6)。改进脚本引擎、JDBC 4.0。
-
Java SE 7 (1.7) (2011年)
- 引入
try-with-resources
、NIO.2、Switch字符串等。
- 引入
-
Java SE 8 (1.8) (2014年)
- LTS版本。新增Lambda表达式、Stream API、新的日期时间API。
-
Java SE 9 (2017年)
- 模块化系统(Project Jigsaw)、JShell工具。版本号改为直接数字(不再用1.x)。
-
Java SE 10~20 (2018年起)
- 每6个月发布一个版本(如Java 10到Java 20),但仅部分版本为LTS:
- Java 11 (2018年):第二个LTS,引入HTTP Client API、局部变量类型推断(
var
)。 - Java 17 (2021年):第三个LTS,模式匹配、密封类。
- Java 21 (2023年):第四个LTS,虚拟线程(Project Loom)、结构化并发。
- Java 11 (2018年):第二个LTS,引入HTTP Client API、局部变量类型推断(
- 每6个月发布一个版本(如Java 10到Java 20),但仅部分版本为LTS:
常见的错误说法
-
版本号格式混淆
- ❌ 错误:将Java 8称为“Java 1.8”(正确仅限内部版本号)。
- ✅ 正确:公开版本号为Java 8,JDK版本为1.8.0_XX。
-
不存在的版本名称
- ❌ 错误:“Java 2.0”或“Java 3.0”。
- ✅ 正确:“Java 2”是平台品牌(涵盖1.2~1.4),而非具体版本。
-
误解LTS版本
- ❌ 错误:认为Java 7或Java 9是LTS。
- ✅ 正确:Oracle定义的LTS为Java 8、11、17、21等,非LTS版本仅支持6个月。
-
混淆Java SE/EE/ME
- ❌ 错误:将企业版(Java EE)或微型版(Java ME)的功能视为Java SE标准。
- ✅ 正确:Java SE是标准版,EE和ME为独立平台(现已移交Eclipse基金会)。
-
误判OpenJDK非官方
- ❌ 错误:“OpenJDK是第三方实现”。
- ✅ 正确:OpenJDK是官方参考实现,Oracle JDK基于其构建(功能一致,支持策略不同)。
-
特性版本归属错误
- ❌ 错误:“Lambda表达式在Java 7中可用”。
- ✅ 正确:Lambda是Java 8的特性。
常见误区多源于历史命名习惯或对发布周期的不了解。开发时应以Oracle官方文档或OpenJDK为准。
OpenJDK的版本及对应关系
OpenJDK 是 Java 的官方开源参考实现,由 Oracle 和开源社区共同维护。其版本与 Java SE 版本直接对应,但需要注意 发布策略 和 LTS(长期支持) 的定义。以下是关键版本和分类:
1. 版本命名规则
- Java SE 版本:OpenJDK 的版本号与 Java SE 完全一致(如 Java 8/11/17/21),没有独立的版本体系。
- 内部构建号:例如,Java 8 的 OpenJDK 构建可能标记为
1.8.0_XX
,但公开版本直接称为 OpenJDK 8。
2. 主要版本分类
(1) LTS(长期支持)版本
- OpenJDK 8
- 首个 LTS 版本,2014 年发布,支持至 2030 年(部分商业供应商如 Azul、Amazon 提供扩展支持)。
- 包含 Lambda 表达式、Stream API 等核心特性。
- OpenJDK 11
- 2018 年发布,支持至 2026 年(商业供应商支持更久)。
- 引入
var
局部变量推断、HTTP Client API、ZGC 垃圾收集器。
- OpenJDK 17
- 2021 年发布,支持至 2029 年。
- 新增密封类(Sealed Classes)、模式匹配(Pattern Matching)、Vector API。
- OpenJDK 21
- 2023 年发布,支持至 2031 年。
- 虚拟线程(Virtual Threads,即 Project Loom)、结构化并发(Structured Concurrency)。
(2) 非 LTS(短期支持)版本
- 每 6 个月发布一次(如 OpenJDK 920、22),仅提供 6 个月官方更新。
- 示例特性版本:
- OpenJDK 14:
Records
(预览)、Switch 表达式
。 - OpenJDK 16:
Pattern Matching for instanceof
(正式)。 - OpenJDK 20:
Scoped Values
(预览)、虚拟线程二次增强。
- OpenJDK 14:
3. OpenJDK 的构建版本
OpenJDK 是开源代码库,不同厂商基于其源码提供自己的构建版本,区别主要在 支持周期 和 附加工具:
- Oracle OpenJDK:免费,但仅支持 LTS 版本 6 个月(需长期支持需付费订阅)。
- Eclipse Temurin(原 AdoptOpenJDK):完全免费,提供 LTS 版本的长期支持。
- Amazon Corretto:AWS 维护,免费长期支持(Java 8/11/17/21)。
- Azul Zulu:商业支持选项,兼容性强。
- Microsoft Build of OpenJDK:微软优化版本,支持 Windows/macOS/Linux。
4. 常见误区
-
“OpenJDK 版本与 Java SE 版本无关”
- ❌ 错误:OpenJDK 是 Java SE 的官方开源实现,版本一一对应(如 OpenJDK 11 = Java SE 11)。
-
“所有 OpenJDK 构建都免费长期支持”
- ❌ 错误:仅社区或商业供应商(如 Temurin、Corretto)提供免费长期支持,Oracle OpenJDK 的 LTS 版本仅支持 6 个月。
-
“OpenJDK 功能不如 Oracle JDK”
- ❌ 错误:两者功能一致,差异仅在于支持策略和附加工具(如 Oracle JDK 包含 Flight Recorder)。
-
“非 LTS 版本不可用于生产”
- ✅ 部分正确:非 LTS 版本适合短期测试新特性,但生产环境建议使用 LTS + 供应商长期支持。
5. 如何选择版本?
- 生产环境:优先选择 LTS 版本(如 11/17/21),搭配长期支持供应商(如 Temurin、Corretto)。
- 开发测试:可尝试最新非 LTS 版本(如 OpenJDK 22)体验新特性。
- 旧系统维护:若依赖旧版特性(如 Java 8),需选择提供扩展支持的构建版本。
总结
OpenJDK 版本与 Java SE 完全对应,LTS 版本(8/11/17/21)是生产环境首选。实际使用中需根据需求选择厂商构建版本(如 Temurin、Corretto),并注意支持周期。非 LTS 版本适合短期测试,但需及时升级。