Java 14 它不是一个长久支持(LTS)版本。虽然该版本并不是长期版本,但即使再发布新版本也是在此基础上的。
在JDK14中新增了以下16个新特性:
- 305: instanceof的模式匹配 (预览)
- 343: 打包工具 (Incubator)
- 345: G1的NUMA内存分配优化
- 349: JFR事件流
- 352: 非原子性的字节缓冲区映射
- 358: 友好的空指针异常
- 359: Records (预览)
- 361: Switch表达式 (标准)
- 362: 弃用Solaris和SPARC端口
- 363: 移除CMS(Concurrent Mark Sweep)垃圾收集器
- 364: macOS系统上的ZGC
- 365: Windows系统上的ZGC
- 366: 弃用ParallelScavenge + SerialOld GC组合
- 367: 移除Pack200 Tools和API
- 368: 文本块 (第二个预览版)
- 370: 外部存储器API (Incubator)
重点特性列表:
- instanceof的模式匹配 (预览)
- Switch表达式 (标准)
- 文本块
instanceof模式匹配
过去我们写instanceof,需要这么写:
Object obj = "glj_str";
if(obj instanceof String){
String str = (String) obj;
System.out.println("obj:" + str);
}
通过java14的新特性,我们可以简化成如下方式:
Object obj = "glj_str";
if(obj instanceof String str){
System.out.println("obj:" + str);
}
Switch表达式
Switch表达式在之前已经描述过不在继续描述
文本块作为预览特性保留
在 Java 13 之前,多行字符串写法为:
String html ="<html>\n" +
" <body>\n" +
" <p>Hello, World</p>\n" +
" </body>\n" +
"</html>\n";
String json ="{\n" +
" \"name\":\"glj\",\n" +
" \"age\":25\n" +
"}\n";
在 Java 13 引入文本块之后,写法为:
String html = """
<html>
<body>
<p>Hello, World</p>
</body>
</html>
""";
String json = """
{
"name":"glj",
"age":25
}
""";
记录类型(Record Type)的引入(预览特性)
Java 14中记录类型(Record Type)作为预览特性被引入。记录对象允许使用紧凑的语法来声明类,和枚举类型一样,记录也是类的一种受限形式。
Record类型使用如下:
public static void main(String[] args) {
Point point = new Point(1,3);
System.out.println(point.x());
System.out.println(point.y());
}
//定义一个record
public record Point(int x, int y) {}
感觉很像lombock