Text Blocks 预览与 Java 的多行字符串现代化“当开发者无需在字符串转义和换行符上耗费精力,就能将更多心思放在业务逻辑上时,代码的创造力自然会得到释放。”
2019 年 9 月,JDK 13 正式发布。它并非长期支持版本(LTS),但在 Java 的快速迭代进程中有着不可忽视的作用。JDK 13 没有一味地去追求那些华而不实的“大功能”,而是把重点放在了两个关键方面:一是让 Java 语言的表达更加自然流畅,例如优化多行字符串的处理;二是提升运行时性能,像对垃圾回收器进行优化。这个版本就像是一个精心打磨的“精修版”,借助预览特性来收集开发者的反馈,为后续正式功能的推出奠定基础。
JDK 13 没有进行大规模的架构调整,而是着重推出了两个重要的预览特性:文本块(Text Blocks)解决了 Java 在处理多行字符串时长期存在的语法难题;对 switch 表达式的增强,则让这一现代控制流结构更加完善。此外,它还对 ZGC 和 Shenandoah 等低延迟垃圾回收器做了重要改进,以满足云原生环境下对极致性能的追求。这些看似不起眼的改进,实际上是 Java 朝着更简洁、更高效、更贴合开发者需求的方向迈出的重要一步。
JDK 13 的所有新特性都是基于 JSR 388(《Java SE 13 发布规范》) 来实现标准化落地的。在这个快速迭代的版本中,它主要聚焦在两个重要方向:一是通过预览特性来进一步推动语言现代化的进程;二是让低延迟垃圾回收器(GC)更加成熟稳定。每一项改进的目标都很明确,要么是为了提高开发效率,要么是为了提升运行时性能,同时也为 JDK 14 及后续版本的正式特性提供了实践基础。
在过去,Java 开发者在处理 JSON、HTML、SQL 或者 XML 这类多行文本时,常常需要使用繁琐的字符串拼接方式,还得处理各种转义字符,这使得代码的可读性受到很大影响。JDK 13 引入了文本块(Text Blocks)这个预览特性,通过三重引号 """ 语法,彻底改变了这种状况。
• 目标:让多行字符串字面量的编写变得更简单,减少转义操作,提高代码的可读性和可维护性。
• 语法示例:
// JDK 13 及以上版本(需要使用 --enable-preview 参数)
String html = """
<html>
<body>
<p>Hello, world</p>
</body>
</html>
""";
String json = """
{
"name": "DevLlama",
"type": "blog"
}
""";• 关键优势:
")字符通常不需要进行转义(除非它出现在结束分隔符前面)。📌 意义:这是 Java 语言在字符串处理方面的一次重要现代化改进,大大提升了处理结构化文本时的开发体验,也为后续该特性的正式标准化奠定了基础。
switch 表达式增强(预览特性,JEP 354)在 JDK 12 首次引入 switch 表达式之后,JDK 13 对其进行了重要的增强,引入了 yield 关键字,这个关键字可以在 switch 表达式的代码块中返回值,从而解决了复杂逻辑分支的表达问题。
• 目标:让 switch 表达式的语义更加完善,能够处理包含多行代码的分支逻辑。
• 语法示例:
int j = switch (day) {
case MONDAY, TUESDAY, WEDNESDAY:
yield;
case THURSDAY, FRIDAY:
yield;
case SATURDAY, SUNDAY:
int hours = computeHours(day);
yield hours *; // 复杂逻辑
};• 关键优势:
yield 替代 break value:这样语义更加清晰,不容易和传统的 break 语句混淆。switch 的分支中,可以执行任意的逻辑代码,然后再返回结果。switch 语句仍然可以作为一个表达式使用,能够直接进行赋值操作。📌 意义:
yield关键字的引入,让switch表达式从只能进行简单的映射,发展到能够处理完整的逻辑表达,是它成为 Java 核心控制流结构的重要一步。
ZGC(Z 垃圾回收器)在 JDK 11 中作为实验性特性被引入,它的目标是实现亚毫秒级的停顿。在 JDK 13 中,通过 JEP 351 对 ZGC 进行了进一步的优化,让它能够并发地卸载那些未使用的类和类加载器。
-XX:+UnlockExperimentalVMOptions -XX:+UseZGC 参数来启用。📌 意义:这一改进让 ZGC 在朝着“完全无停顿”的目标上前进了一大步,进一步巩固了它在超低延迟场景中的优势地位。
Shenandoah 垃圾回收器(GC)在 JDK 12 中首次出现。在 JDK 13 中,通过 JEP 353,它从实验性特性转变为生产就绪状态(Production-Ready),虽然在使用时仍然需要解锁相关选项,但它的稳定性和性能已经得到了官方的认可。
-XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC 参数来启用。
📌 意义:Shenandoah 的成熟让 Java 在低延迟垃圾回收领域有了两种可靠的选择,开发者可以根据具体的使用场景来灵活挑选。
Text Blocks 和增强版 switch 表达式的首个公开验证版本,社区的反馈直接对 JDK 14/15 的最终设计产生了影响。JDK 13 通过 JSR 388 整合了四大关键能力,包括具有革命性的文本块(JEP 355)、得到完善的 switch 表达式(JEP 354),以及低延迟垃圾回收器(GC)的双重突破(ZGC 的并发卸载 JEP 351 和 Shenandoah 的生产就绪 JEP 353)。这些改进没有去追求宏大的架构变革,而是精准地解决了开发者日常编码中的痛点,满足了云原生时代对极致性能的需求。
可以说,JDK 13 可能不会出现在你的生产环境中,但它所验证的文本块语法和成熟的低延迟 GC 生态,已经成为现代 Java 不可缺少的一部分。这表明,很多时候,最伟大的进步往往是从关注一行代码这样的小细节开始的。
[1] JSR 388: Java SE 13 规范: https://www.jcp.org/en/jsr/detail?id=388
[2] OpenJDK JDK 13 官方页面: https://openjdk.org/projects/jdk/13/
[3] JEP 355: Text Blocks (Preview): https://openjdk.org/jeps/355
[4] JEP 354: Switch Expressions (Preview): https://openjdk.org/jeps/354
[5] JEP 351: ZGC: Uncommit Unused Memory: https://openjdk.org/jeps/351