「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」。
当然 不论新老朋友 我相信您都可以 从中获益。如果觉得 「不错」 的朋友,欢迎 「关注 + 留言 + 分享」,文末有完整的获取链接,您的支持是我前进的最大的动力!
特性总览
以下是 Java 14 中的引入的部分新特性。关于 Java 14 新特性更详细的介绍可参考这里。
语言及特性更改:
Switch 表达式-标准(JEP 361)
instanceof 的模式匹配-预览(JEP 305)
有用的 NullPointerExceptions(JEP 358)
record-预览(JEP 359)
文本块-预览(JEP 368)
JVM 更改:
针对 G1 NUMA 感知内存分配的优化(JEP 345)
删除并发标记扫描(CMS)垃圾收集器(JEP 363)
JFR 事件流(JEP 349)
macOS 上的 ZGC-实验性(JEP 364)
Windows 上的 ZGC-实验性(JEP 365)
弃用 ParallelScavenge + SerialOld 的 GC 组合(JEP 366)
其他特性:
打包工具(JEP 343)
非易失性映射字节缓冲区(JEP 352)
弃用 Solaris 和 SPARC 端口(JEP 362)
删除 Pack200 工具和 API(JEP 367)
外部存储器访问 API(JEP 370)
一. Switch 表达式-标准(JEP 361)
在上两个版本中保留的预留功能,如今终于在 Java 14 中获得了永久性的地位。
Java 12 为表达是引入了 Lambda 语法,从而允许使用多个大小写标签进行模式匹配,并防止出现导致冗长代码的错误。它还强制执行穷尽情况,如果没有涵盖所有输入情况,则会抛出编译错误。
Java 13 在第二个预览版本使用了 yield 替代了原有的 break 关键字来返回表达式的返回值。
Java 14 现在终于使这些功能成为了标准:
String result = switch (day) {
case "M", "W", "F" -> "MWF";
case "T", "TH", "S" -> "TTS";
default -> {
if (day.isEmpty()) {
yield "Please insert a valid day.";
} else {
yield "Looks like a Sunday.";
}
}
};
System.out.println(result);
注意,yield 不是 Java 中的新关键字,它仅用于 Switch 表达式中。
二. instanceof 的模式匹配-预览(JEP 305)
在 Java 14 之前,我们用于 instanceof-and-cast 检查对象的类型并将其转换为变量。
if (obj instanceof String) { // instanceof
String s = (String) obj; // cast
if("jdk14".equalsIgnoreCase(s)){
//...
}
}else {
System.out.println("not a string");
}
现在,在 Java 14 中,我们可以像这样重构上面的代码:
if (obj instanceof String s) { // instanceof, cast and bind variable in one line.
if("jdk4".equalsIgnoreCase(s)){