Java 新特性核心知识

Java 是一门"慢热型"语言。它不像 Python 那样激进引入新语法,也不像 JavaScript 那样一年一个版本。Java 的每一次版本更新,都是在向后兼容语言进化之间小心翼翼地找平衡。

JDK 8 引入了 Lambda 和 Stream,让 Java 第一次有了函数式编程的能力。JDK 11 的 ZGC 让 GC 停顿降到亚毫秒级。JDK 21 的虚拟线程,更是 Java 并发编程诞生以来最大的一次变革。

但很多团队还在用 JDK 8,甚至 JDK 7。很多工程师知道"Lambda 是一种语法糖",但说不清楚它背后是怎么工作的。很多项目用 Stream API 写得很爽,但不知道它的惰性求值是怎么实现的。

这套内容,就是帮你把 Java 新特性的前世今生全部梳理清楚。

内容总览

Java 新特性可以分为几个阶段:

阶段版本核心特性解决的问题
函数式革命JDK 8Lambda/Stream/Optional代码简洁、并行计算
模块化时代JDK 9JPMS 模块系统大型应用结构化
生产力提升JDK 10~17var/文本块/密封类/Record减少样板代码
并发革命JDK 19~21虚拟线程/结构化并发百万并发不再是梦

知识全景

JDK 8: 里程碑式的变革 🔴🔴

JDK 8 是 Java 历史上最重要的版本,没有之一。

Lambda 表达式原理

Lambda 不只是语法糖。编译器把它转换成 invokedynamic 调用,由 LambdaMetafactory 在运行时生成函数式接口的实现类。理解这个过程,才能理解为什么 Lambda 里 this 指向的是外部类而不是 Lambda 本身。

Stream 流操作(中间操作/终端操作)

Stream 的核心是惰性求值。中间操作不执行,只有遇到终端操作时才触发整个管道的计算。parallelStream() 使用 ForkJoinPool,在数据量大时可以轻松利用多核。

⚠️

Stream 不是万能的。数据量小、逻辑简单的场景,用 for 循环反而更直观。Stream 的优势在于:数据处理管道清晰、易并行、可组合。但如果逻辑本身很复杂或者需要中途 break,Stream 反而不适合。

Optional 使用最佳实践

Optional 是解决 NullPointerException 的函数式方案。但它有自己的反模式——把 Optional 当字段用、在集合里放 Optional,都是误用。

新日期时间API(LocalDate/DateTimeFormatter)

java.time 是完全重新设计的日期时间 API,替代了原来糟糕的 Date 和 Calendar。LocalDate/LocalDateTime/ZonedDateTime/Instant 各有各的用途。

接口默认方法与静态方法

接口可以有实现了!这不是语言设计失误,而是 JDK 团队为了向后兼容做的艰难选择——给集合接口加 forEach() 方法时,如果不允许默认实现,所有实现类都会编译失败。

JDK 9~17: 持续进化的语法糖 🟡

模块化(JPMS)

Java 9 的模块系统是一把双刃剑。它为大型应用提供了结构化依赖的能力,但迁移成本极高。Tomcat、Spring 花了多年才兼容模块系统,普通项目如果不是特别需要,可以暂时跳过。

文本块(Text Block)

JDK 15+ 的文本块让多行字符串终于能优雅地写了。JSON、SQL、HTML 这些场景再也不需要一堆 \n 和拼接符。

Record 记录类

JDK 16+ 的 Record 是不可变数据载体的完美方案。相比 Lombok 的 @Value,Record 是语言特性,不需要注解处理器。

密封类(Sealed Class)

JDK 17+ 的密封类让类型层次有了"有限集合"的概念。配合模式匹配,可以让编译器检查穷举性。

模式匹配(Pattern Matching)

模式匹配是 Java 向函数式迈进的又一步。instanceof 的模式变量、switch 的模式匹配——让代码更简洁,也让编译器能做更多检查。

JDK 21: 并发革命 🔴🔴

虚拟线程(Virtual Thread)原理

虚拟线程是 Java 21 LTS 的最大亮点。它不是新的 API,而是一种新的线程实现——由 JVM 管理,不再绑定 OS 线程。

一个简单的理解:之前一个 OS 线程对应一个 Java 线程,现在一个 OS 线程可以承载成千上万个虚拟线程。

💡

虚拟线程的成本极低:创建成本接近新建一个对象,上下文切换成本接近一个方法调用。这意味着你可以为每个请求创建一个虚拟线程,不用再担心线程池大小的问题。

结构化并发(Structured Concurrency)

JDK 21 的结构化并发让多线程编程更安全——线程的生命周期和作用域绑定在一起,不会出现"线程逃逸"的问题。

版本演进全景 🟡

JDK 版本特性演进总结

从 JDK 8 到 JDK 21,每个版本的特性一目了然。选择用哪个版本,不仅要看新特性有多诱人,更要看生态兼容性和 LTS 版本的支持周期。

面试关联

Java 新特性和生产实践紧密相连:

阅读建议

你的阶段推荐顺序
JDK 8 重点Lambda → Stream → Optional → 接口默认方法 → 日期时间 API
JDK 9~17文本块 → Record → 密封类 → 模式匹配 → 模块化
JDK 21 新特性虚拟线程 → 结构化并发 → 模式匹配完善
面试冲刺Lambda 原理 → Stream 惰性求值 → 虚拟线程 vs OS 线程 → Optional 反模式

记住:Java 新特性不是炫技,是解决实际问题。Lambda 让代码简洁了,但也带来了可读性挑战;虚拟线程让并发更容易了,但也带来了 ThreadLocal 的新问题。每引入一个新特性,都要理解它的设计意图和潜在代价。