java历次版本及更新内容
Java自1995年诞生以来经历了26年发展,从JDK1.0到Java21共推出15个主要版本。核心演进包括:基础架构(JVM/GC)、语法特性(泛型/Lambda/Records)、性能优化(G1/ZGC)和并发能力(虚拟线程)。版本迭代呈现语法简化、性能提升、安全增强和开发效率提高四大趋势,其中Java8/11/17/21为长期支持(LTS)版本。企业应用建议选择LTS版本,开发者可尝试最新特
·
Java(最初称为 Oak)自 1995 年诞生以来,经历了多次重大版本迭代,从早期的 JDK 1.0 到如今的 Java 21,每一个版本都带来了显著的功能增强和性能优化。以下是 Java 主要版本的迭代历史及核心更新内容:
Java 1.0(1996 年 1 月)
- 首次正式发布,奠定了 Java 的核心基础:
- 引入Java 虚拟机(JVM) 和字节码机制,实现 “一次编写,到处运行(Write Once, Run Anywhere)”。
- 包含基础类库(
java.lang
、java.util
等)、AWT(抽象窗口工具包)用于 GUI 开发。 - 支持多线程、垃圾回收(GC)等核心特性。
Java 1.1(1997 年 2 月)
- 核心增强:
- 引入内部类(Inner Classes),允许在类内部定义另一个类。
- 新增反射机制(
java.lang.reflect
包),支持动态获取类信息和调用方法。 - 增加 JDBC API,实现对数据库的统一访问。
- 改进 AWT,支持事件委托模型(Event Delegation Model)。
- 新增 RMI(远程方法调用),支持分布式通信。
Java 1.2(1998 年 12 月)
- 重大升级,更名为 “Java 2”,划分为 J2SE(标准版)、J2EE(企业版)、J2ME(微型版):
- 引入集合框架(
java.util.Collection
),包括ArrayList
、HashMap
等容器类,替代旧的Vector
和Hashtable
。 - 新增严格 fp 关键字,确保浮点数运算的跨平台一致性。
- 引入Swing 组件库,提供更丰富的 GUI 组件(如
JFrame
、JButton
),替代部分 AWT 功能。 - 支持JIT(即时编译),提升执行效率。
- 引入集合框架(
Java 1.3(2000 年 5 月)
- 主要更新:
- 引入Java Naming and Directory Interface(JNDI),支持命名和目录服务。
- 新增CORBA(公共对象请求代理架构) 支持,强化分布式计算。
- 改进垃圾回收机制,默认使用分代收集器。
- 增加
java.math.BigDecimal
的精度支持。
Java 1.4(2002 年 2 月)
- 功能扩展:
- 引入正则表达式(
java.util.regex
包),支持字符串模式匹配。 - 新增NIO(非阻塞 IO) 包(
java.nio
),提升 IO 操作效率。 - 支持XML 解析(JAXP 1.1)和 XSLT 转换。
- 增加
assert
关键字,用于调试和测试。 - 引入
IPv6
支持,优化网络功能。
- 引入正则表达式(
Java 5(2004 年 9 月,版本号跳跃至 5.0,不再使用 1.x)
- 里程碑式更新,引入大量现代编程语言特性:
- 泛型(Generics):支持类型参数(如
List<String>
),提升类型安全性。 - 增强 for 循环(foreach):简化集合遍历(
for (String s : list) { ... }
)。 - 自动装箱 / 拆箱:基本类型与包装类自动转换(如
int
与Integer
)。 - 枚举(Enums):通过
enum
关键字定义枚举类型,替代常量模式。 - 可变参数(Varargs):允许方法接收可变数量的参数(如
void func(String... args)
)。 - 静态导入:直接导入类的静态方法 / 字段,简化代码。
- 并发工具增强:新增
java.util.concurrent
包(如ThreadPoolExecutor
、ConcurrentHashMap
),简化多线程编程。
- 泛型(Generics):支持类型参数(如
Java 6(2006 年 12 月)
- 注重稳定性和性能:
- 引入脚本语言支持(JSR 223),可在 Java 中调用 JavaScript 等脚本。
- 增强JDBC 4.0,支持注解配置和自动加载驱动。
- 改进垃圾回收,新增G1 收集器(实验性)。
- 优化 JVM 启动速度和内存占用。
- 新增
java.util.ServiceLoader
,简化服务发现机制。
Java 7(2011 年 7 月)
- 语法和性能优化:
- try-with-resources:自动关闭实现
AutoCloseable
的资源(如文件流),简化异常处理。 - 钻石运算符(Diamond Operator):简化泛型实例化(
List<String> list = new ArrayList<>()
)。 - 字符串在 switch 语句中使用:支持
switch (str) { case "a": ... }
。 - 数字字面量增强:支持二进制表示(
0b1010
)和下划线分隔(1_000_000
)。 - NIO 2.0:新增
java.nio.file
包,提供更强大的文件系统操作(如Path
、Files
)。 - G1 收集器从实验性变为正式特性。
- try-with-resources:自动关闭实现
Java 8(2014 年 3 月)
- 革命性更新,引入函数式编程范式:
- Lambda 表达式:允许将函数作为参数传递(如
(a, b) -> a + b
),简化代码。 - Stream API:提供声明式集合处理(如
list.stream().filter().map().collect()
)。 - 接口默认方法:接口中可定义带实现的
default
方法,兼容旧版本。 - 方法引用:通过
::
语法引用已有方法(如String::length
)。 - Optional 类:减少空指针异常(NPE),优雅处理 null 值。
- 新日期时间 API(
java.time
包):替代旧的Date
和Calendar
,支持不可变对象和时区处理。 - ** Nashorn JavaScript 引擎 **:替代 Rhino,提升脚本执行效率。
- 并行流:支持多线程处理集合,提升大数据量运算效率。
- Lambda 表达式:允许将函数作为参数传递(如
Java 9(2017 年 9 月)
- 模块化系统引入:
- Project Jigsaw:引入模块系统(
module-info.java
),将 JDK 拆分为多个模块,减少内存占用。 - JShell:交互式编程工具,支持即时执行代码片段,简化测试。
- 接口私有方法:允许接口定义
private
方法,增强代码复用。 - 集合工厂方法:新增
List.of()
、Map.of()
等,创建不可变集合。 - 增强 Stream API:新增
takeWhile()
、dropWhile()
等方法。 - HTTP/2 客户端(实验性):支持异步 HTTP 请求。
- Project Jigsaw:引入模块系统(
Java 10(2018 年 3 月)
- 短期支持版本(6 个月),主要更新:
- 局部变量类型推断(var 关键字):允许
var list = new ArrayList<String>()
,编译器自动推断类型(仅限局部变量)。 - 应用类数据共享(AppCDS):提升应用启动速度,共享类数据。
- G1 收集器优化:支持并行 Full GC,减少停顿时间。
- 移除
javah
工具,功能由javac
替代。
- 局部变量类型推断(var 关键字):允许
Java 11(2018 年 9 月,长期支持版本 LTS)
- LTS 版本,企业级应用首选:
- 字符串增强:新增
isBlank()
、strip()
、lines()
等方法。 - Optional 增强:新增
isEmpty()
方法,简化空判断。 - HTTP 客户端正式发布(
java.net.http
包),替代旧的HttpURLConnection
。 - 移除 Java EE 和 CORBA 模块(如
java.xml.ws
),推动模块化。 - ZGC 收集器(实验性):低延迟垃圾回收器,支持 TB 级内存。
- Epsilon 收集器(实验性):无操作收集器,用于性能测试。
jshell
增强:支持代码片段保存和加载。
- 字符串增强:新增
Java 12(2019 年 3 月)
- 预览特性为主:
- Switch 表达式预览:支持表达式语法(
switch (x) { case 1 -> 10; case 2 -> 20; }
)。 - G1 收集器优化:新增 “可中断的混合收集”,提升响应速度。
- Microbenchmark 套件:引入 JMH 基准测试工具,方便性能测试。
- Switch 表达式预览:支持表达式语法(
Java 13(2019 年 9 月)
- 增强预览特性:
- Switch 表达式二次预览:新增
yield
关键字返回结果(case 1 -> yield 10;
)。 - 文本块预览(
"""
包裹多行字符串):简化 HTML、SQL 等多行文本编写。 - ZGC 优化:支持将未使用的内存归还给操作系统。
- Switch 表达式二次预览:新增
Java 14(2020 年 3 月)
- 正式特性与预览结合:
- Switch 表达式正式发布:支持箭头语法和
yield
。 - 文本块二次预览:新增
stripIndent()
、translateEscapes()
等方法。 - Records 预览:简化数据载体类定义(
record Point(int x, int y) {}
,自动生成equals
、hashCode
等方法)。 - NullPointerException 优化:错误信息更清晰,提示具体哪个对象为 null。
- ZGC 正式发布:生产可用,低延迟(亚毫秒级停顿)。
- Switch 表达式正式发布:支持箭头语法和
Java 15(2020 年 9 月)
- 多个预览特性转正:
- 文本块正式发布:
"""
语法成为标准。 - Records 二次预览:调整语法,增强兼容性。
- 密封类预览(Sealed Classes):限制类的继承(
sealed class A permits B, C
)。 - Shenandoah 收集器正式发布:低延迟 GC,支持并发整理。
- 隐藏类(Hidden Classes):用于动态生成类,提升框架(如 Spring、Groovy)性能。
- 文本块正式发布:
Java 16(2021 年 3 月)
- 功能丰富的版本:
- Records 正式发布:简化不可变数据类的编写。
- 密封类二次预览:完善继承控制机制。
- 默认启用 C++14 标准:改进 JVM 的 C++ 代码库。
- Vector API 预览:提供高性能的向量运算支持。
- ZGC 优化:支持类数据共享(CDS)。
Java 17(2021 年 9 月,长期支持版本 LTS)
- 最新 LTS 版本,企业级应用广泛采用:
- 密封类正式发布:通过
sealed
、non-sealed
、permits
关键字控制继承。 - 移除实验性 AOT 和 JIT 编译器。
- 增强伪随机数生成器:新增
RandomGenerator
接口,统一随机数生成。 - Switch 模式匹配预览:支持
case Integer i -> ...
的模式匹配。 - 强封装 JDK 内部 API:限制对
sun.misc
等内部类的访问,提升安全性。
- 密封类正式发布:通过
Java 18(2022 年 3 月)
- 主要更新:
- UTF-8 作为默认字符集:替代系统默认字符集,统一跨平台编码。
- 简单 Web 服务器:内置轻量级 HTTP 服务器(
com.sun.net.httpserver
),方便测试。 - Switch 模式匹配二次预览。
- Vector API 二次 incubator:优化向量运算性能。
Java 19(2022 年 9 月)
- 预览和 incubator 特性:
- 虚拟线程预览(Virtual Threads):轻量级线程,提升高并发场景性能(Project Loom)。
- 结构化并发预览(Structured Concurrency):简化多线程代码,提升可读性和可靠性。
- Switch 模式匹配三次预览。
- 外部函数和内存 API incubator:支持调用本地代码和管理堆外内存。
Java 20(2023 年 3 月)
- 延续预览特性:
- 虚拟线程二次预览:优化 API 和性能。
- 结构化并发二次预览。
- Switch 模式匹配正式发布:支持模式匹配(如
case String s && s.length() > 0
)。 - 作用域值预览(Scoped Values):替代线程局部变量(ThreadLocal),更安全地共享数据。
Java 21(2023 年 9 月,长期支持版本 LTS)
- 最新 LTS 版本,引入多项重要特性:
- 虚拟线程正式发布:轻量级线程,大幅提升并发处理能力,简化高并发编程。
- 结构化并发正式发布:通过
StructuredTaskScope
管理线程生命周期,避免线程泄漏。 - Switch 模式匹配增强:支持更多模式类型。
- 序列集合(Sequenced Collections):新增
SequencedCollection
、SequencedMap
接口,统一有序集合操作。 - 未命名模式和变量:允许用
_
表示未使用的模式或变量(如case _ -> ...
)。
总结
Java 的版本迭代呈现出以下趋势:
- 语法简化:从泛型、Lambda 到 Records、模式匹配,不断降低代码复杂度。
- 性能优化:从 JIT、G1 到 ZGC、虚拟线程,持续提升运行效率和并发能力。
- 安全性增强:封装内部 API、强化类型检查,减少安全漏洞。
- 开发效率提升:引入 JShell、文本块、局部变量类型推断等,提升编码体验。
对于企业应用,建议优先选择 LTS 版本(如 Java 8、11、17、21),以获得长期支持和稳定性;而开发者可尝试最新版本,体验前沿特性。
更多推荐
所有评论(0)