Java 作为企业级开发的主流语言,其版本迭代始终围绕着提升开发效率、增强性能与安全性、适配现代技术场景展开。本文汇总了 Java 8 到 Java 25 的核心新特性,帮助你快速把握语言演进脉络。

Java 8(LTS)—— 函数式编程的里程碑

Java 8 是史上最具颠覆性的版本之一,引入了函数式编程范式,彻底改变了 Java 代码的编写方式。

  • Lambda 表达式:用简洁的语法实现匿名函数,替代冗长的匿名内部类。例如:

List<String> list = Arrays.asList("a", "b", "c");
list.forEach(s -> System.out.println(s)); // Lambda 简化迭代
  • Stream API:为集合提供声明式处理能力,支持过滤、映射、聚合等操作,且原生支持并行计算:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream()
                 .filter(n -> n % 2 == 0)
                 .mapToInt(n -> n * 2)
                 .sum();
  • 接口默认方法与静态方法:允许接口定义带实现的 default 方法,解决了接口升级的兼容性问题;静态方法则为接口提供工具类能力。

  • Optional 类:通过容器化 null 值,强制开发者处理空指针场景,减少 NullPointerException:

Optional<String> name = Optional.ofNullable(getName());
name.ifPresent(n -> System.out.println("Name: " + n)); // 安全处理可能为 null 的值
  • 新日期时间 API(java.time):替代线程不安全的 SimpleDateFormat 和 Date,提供 LocalDate、Instant 等不可变类,支持链式操作。

  • 其他亮点:方法引用(:: 语法)、Nashorn JavaScript 引擎、Base64 内置支持等。

Java 9 —— 模块化与工具链升级

时隔 3 年发布的 Java 9 聚焦于大型应用的模块化管理和开发效率提升。

  • 模块化系统(Project Jigsaw):引入 module 概念,通过 module-info.java 声明模块依赖和导出包,实现代码隔离与按需加载,减少内存占用。

  • JShell 交互式工具:支持即时执行 Java 代码片段,无需编写类和 main 方法,适合快速验证逻辑或学习语法:

  • 集合工厂方法:新增 List.of()、Set.of()、Map.of() 等静态方法,便捷创建不可变集合(性能优于 Collections.unmodifiableXXX)。

  • 接口私有方法:允许接口定义 private 方法,供默认方法复用逻辑,避免代码冗余。

  • Stream API 增强:新增 takeWhile()(保留满足条件的前缀)、dropWhile()(丢弃满足条件的前缀)、ofNullable()(支持单元素 null 安全流)。

Java 10 —— 简化开发的小步优化

Java 10 延续了 6 个月迭代周期(Oracle 政策),主要带来局部变量简化和性能提升。

  • 局部变量类型推断(var 关键字):编译器可根据赋值自动推断局部变量类型,减少代码冗余(仅限方法内局部变量):

var list = new ArrayList<String>(); // 等价于 ArrayList<String> list
var map = new HashMap<Integer, String>();
  • 应用类数据共享(AppCDS):扩展类数据共享(CDS)功能,允许跨应用共享已加载的类数据,缩短应用启动时间。

  • 线程局部握手:支持单独暂停某个线程进行调试或监控,无需暂停整个 JVM,提升系统可用性。

Java 11(LTS) —— 长期支持的实用升级

Java 11 是继 Java 8 后的第二个 LTS 版本,强化了字符串处理和网络能力。

  • 字符串增强:新增 isBlank()(判断空白字符串)、strip()(智能去除前后空格)、lines()(按行拆分)、repeat(n)(重复字符串):

"  hello  ".strip(); // 结果为 "hello"(区别于 trim(),支持 Unicode 空白)
"a\nb\nc".lines().count(); // 结果为 3
"ab".repeat(3); // 结果为 "ababab"
  • HttpClient 标准化:替代老旧的 HttpURLConnection,支持同步 / 异步请求,API 更简洁:

HttpClient client = HttpClient.newHttpClient();

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://example.com"))
    .build();

client.sendAsync(request, BodyHandlers.ofString())
    .thenApply(HttpResponse::body)
    .thenAccept(System.out::println); // 异步请求并打印响应
  • ZGC 实验性引入:新一代低延迟垃圾收集器,目标暂停时间 < 10ms,支持 TB 级内存。

  • 移除项:删除 Nashorn 引擎、CORBA 模块等过时组件。

Java 12 —— 语法糖与性能优化

  • Switch 表达式预览:支持 case 1 -> 10 形式的表达式语法,简化分支逻辑(后续版本转正):

int result = switch (day) {
    case MONDAY, FRIDAY -> 6;
    case TUESDAY -> 7;
    default -> 8;
};
  • Shenandoah 垃圾收集器(实验性):低延迟 GC,通过并发压缩解决内存碎片问题,适合大型应用。

  • 数字格式化增强:CompactNumberFormat 支持 “1k”“1M” 等紧凑格式,适配国际化场景。

Java 13 —— 文本块与 Switch 完善

  • 文本块预览:用 """ 定义多行字符串,自动处理换行和缩进,告别拼接符 +:

String html = """
                <html>
                    <body>Hello, World</body>
                </html>
                """; // 保留格式的多行字符串
  • Switch 表达式二次预览:新增 yield 关键字用于返回值,解决复杂分支的结果返回问题。

  • ZGC 增强:支持将未使用的内存归还给操作系统,优化资源占用。

Java 14 —— Records 与空指针优化

  • Records 预览:简化 “数据载体类”(仅存属性和 getter)的定义,自动生成 equals()、hashCode()、toString():

record Point(int x, int y) {} // 等价于包含 x、y 及相关方法的类
  • NullPointerException 增强:错误信息将明确指出 null 值的具体位置,例如 “Cannot invoke "String.length ()" because "s" is null”。

  • Switch 表达式正式转正:-> 语法和 yield 关键字成为标准特性。

Java 15 —— 密封类与 ZGC 转正

  • 密封类(Sealed Classes)预览:限制类的继承关系,通过 sealed 关键字指定允许继承的子类,增强代码可维护性:

sealed class Shape permits Circle, Rectangle {}

final class Circle extends Shape {}

final class Rectangle extends Shape {}
  • ZGC 正式转正:低延迟垃圾收集器从实验性变为正式特性,适合高吞吐量、低延迟场景。

  • 文本块正式转正:""" 语法成为标准,支持 stripIndent()、translateEscapes() 等方法。

Java 16 —— Records 转正与向量 API

  • Records 正式转正:作为不可变数据载体的简化语法,广泛用于 DTO、POJO 等场景。

  • 向量 API(Incubator):提供硬件加速的向量计算能力,适合科学计算、机器学习等场景。

  • 默认启用 CDS 存档:默认生成类数据共享存档,提升应用启动速度。

Java 17(LTS)—— 密封类转正与长期支持

Java 17 是继 Java 11 后的第三个 LTS 版本,聚合了多个成熟特性。

  • 密封类正式转正:sealed、non-sealed、permits 关键字成为标准,控制类继承边界。

  • 增强的伪随机数生成器:新增 RandomGenerator 接口,统一各类随机数生成器的 API。

  • 移除实验性 AOT 和 JIT 编译器:聚焦核心功能优化。

Java 18 —— 简单 Web 服务器与 UTF-8 默认编码

  • 简单 Web 服务器:内置轻量级 HTTP 服务器(com.sun.net.httpserver 增强),适合开发测试场景。

  • UTF-8 作为默认字符编码:替代传统的平台相关编码,解决跨环境字符集问题。

  • 向量 API 第二次孵化:优化向量计算的性能和易用性。

Java 19 —— 虚拟线程与结构化并发

  • 虚拟线程(预览):轻量级线程,由 JVM 管理而非操作系统,支持百万级并发,大幅降低线程创建成本:

// 虚拟线程简化高并发任务
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
    IntStream.range(0, 10_000).forEach(i -> 
        executor.submit(() -> {
            Thread.sleep(Duration.ofSeconds(1));
            return i;
        })
    );
}
  • 结构化并发(预览):将多个相关任务视为一个整体,简化并发编程的错误处理和资源管理。

Java 20 —— 作用域值与模式匹配

  • 作用域值(预览):替代 ThreadLocal,在虚拟线程场景下更安全地共享上下文信息。

  • 模式匹配 for switch(预览):允许在 switch 中使用类型模式和守卫条件,增强分支逻辑的灵活性:

static String format(Object obj) {
    return switch (obj) {
        case Integer i -> String.format("int %d", i);
        case Long l    -> String.format("long %d", l);
        case String s  -> String.format("string %s", s);
        default        -> obj.toString();
    };
}

Java 21(LTS)—— 虚拟线程转正与模式匹配完善

Java 21 作为 LTS 版本,将多个实验性特性转正,大幅提升并发编程效率。

  • 虚拟线程正式转正:成为标准特性,彻底改变 Java 高并发编程模式。

  • 模式匹配 for switch 正式转正:支持类型模式、记录模式等,简化复杂条件判断。

  • sequenced 集合 :新增 SequencedCollection、SequencedSet、SequencedMap 接口,统一有序集合的操作(如 reversed())。

Java 22 —— 字符串模板与外部函数

  • 字符串模板(预览):通过 \{} 语法在字符串中嵌入表达式,替代 String.format(),支持编译时校验:

String name = "Alice";
String info = STR."Hello, \{name}! Age: \{30}"; // 结果为 "Hello, Alice! Age: 30"
  • 外部函数与内存 API(预览):简化 Java 与 native 代码的交互,更安全地操作堆外内存。

Java 23 —— 数组排序增强与异步编程

  • 数组排序算法优化:对 Arrays.sort() 进行底层优化,提升大型数组的排序性能。

  • 结构化并发第二次预览:完善 API 设计,强化任务间的依赖管理和异常处理。

Java 24 —— 模式匹配扩展与垃圾回收优化

  • 记录模式嵌套匹配:支持在模式匹配中嵌套使用记录模式,简化复杂对象的解构:

record Point(int x, int y) {}

record Line(Point start, Point end) {}

static void printLine(Line line) {
    if (line instanceof Line(Point(int x1, int y1), Point(int x2, int y2))) {
        System.out.printf("Line from (%d,%d) to (%d,%d)", x1, y1, x2, y2);
    }
}
  • Shenandoah GC 增强:进一步降低延迟,优化大内存场景下的表现。

Java 25 —— 字符串模板转正与并发工具升级

  • 字符串模板正式转正:STR、FMT 等处理器成为标准,支持安全的字符串拼接和格式化。

  • 虚拟线程调试工具增强:提供更完善的虚拟线程监控和调试能力,降低排查并发问题的难度。

  • Vector API 正式转正:硬件加速的向量计算 API 稳定发布,提升数值计算性能。

总结

Java 8 到 Java 25 的演进呈现三大趋势:

  1. 语法简化:从 Lambda 到 Records、文本块,持续减少样板代码。

  1. 并发升级:虚拟线程、结构化并发重新定义高并发编程模式。

  1. 性能与安全:ZGC/Shenandoah 降低延迟,密封类、作用域值提升代码安全性。

可根据项目需求选择 LTS 版本(8、11、17、21)保证稳定性,或尝试最新版本体验前沿特性。