Java 12 有哪些新特性?¶
结论¶
Java 12(2018 年 3 月发布)是第一个 LTS 之外的非短期支持版本,重点在语法糖、JVM 性能与 GC。其中最常用的是 switch 表达式(预览)。
1. Switch 表达式(预览,JEP 325)¶
传统 switch 容易漏 break,Java 12 引入箭头语法和 yield:
// 传统
int numDays;
switch (month) {
case 1: case 3: case 5:
case 7: case 8: case 10: case 12:
numDays = 31; break;
case 2:
numDays = 28; break;
default:
numDays = 0;
}
// Java 12 switch 表达式
int numDays = switch (month) {
case 1, 3, 5, 7, 8, 10, 12 -> 31;
case 2 -> 28;
default -> {
int leap = ...;
yield 28 + leap; // 用 yield 返回值
}
};
特点:
- -> 箭头形式不需要 break,不会贯穿。
- switch 可以作为表达式直接返回值。
- 多 case 用逗号分隔。
2. Shenandoah GC(JEP 189)¶
低停顿垃圾回收器,与 G1 类似,但把并发整理阶段也并发执行,停顿时间与堆大小无关。OpenJDK 12 中 GA。
3. G1 收集器增强¶
- 可中断的 mixed GC(JEP 230):让 mixed GC 的停顿更可控。
4. Microbenchmark Suite(JEP 230)¶
JDK 源码自带一套 Java 微基准测试。
5. One Step ASC / ISO-... (弃用与移除)¶
- 移除
com.sun.awt.AWTUtilities - 移除
sun.misc.Unsafe#defineAnonymousClass - 弃用 Security Manager(在更高版本)
6. Files.mismatch(JDK 12 API)¶
7. String 新方法¶
8. Compact Number Format¶
NumberFormat fmt = NumberFormat.getCompactNumberInstance(
Locale.US, NumberFormat.Style.SHORT);
fmt.format(1000); // "1K"
版本脉络
- Java 8:Lambda、Stream、Optional、新日期 API。
- Java 9:模块化、JShell、集合工厂方法。
- Java 11:LTS,var、HTTP Client。
- Java 17:LTS,switch 表达式转正、pattern matching(预览)、sealed class。
- Java 21:LTS,虚拟线程、pattern matching 转正。