预览版:该功能在当前版本可以使用,如果效果不是很好的话,可能以后的其他版本就会删去该功能。
最终版:该功能在之前版本效果很好,之后的每个版本中都会存在该功能。
1、默认字符集为 UTF-8
如果未传递 charset 参数,则标准 Java API 通常使用默认 charset。JDK 在启动时根据运行时环境选择默认字符集:操作系统、用户的区域设置和其他因素。
由于默认字符集在所有地方都不相同,因此使用默认字符集的 API 会带来许多不明显的危险,即使对于有经验的开发人员也是如此。
例,其中 UTF-8
在 macOS 上编码的日语文本文件在以美国英语或日语语言环境在 Windows 上读取时被损坏:
java.io.FileReader(“hello.txt”) -> “こんにちは” (macOS) java.io.FileReader(“hello.txt”) -> “ã?“ã‚“ã?«ã?¡ã? ” (Windows (en-US)) java.io.FileReader(“hello.txt”) -> “縺ォ縺。縺ッ” (Windows (ja-JP)
2、switch 新增模式(第二预览版)
使用 switch 表达式和语句的模式匹配以及对模式语言的扩展来增强 Java 编程语言。将模式匹配扩展到 switch 允许针对多个模式测试表达式,每个模式都有特定的操作,以便可以简洁安全地表达复杂的面向数据的查询。基于 JDK16 instanceof 模式匹配(最终版)优化升级 switch 使用方法,先回忆下JDK16 模式匹配(最终版)
if (obj instanceof String s) {
switch 可直接用 instanceof 模式匹配选择(需要提前考虑 null 判断)
Object o; switch (o) {
case null -> System.out.println(“首先判断对象是否为空,走空指针逻辑等后续逻辑”);
case String s -> System.out.println(“判断是否为字符串,s:” + s);
case record p -> System.out.println("判断是否为Record类型: " + p.toString());
case int[] arr -> System.out.println(“判断是否为数组,展示int数组的长度” + ia.length);
case Integer i -> System.out.println(“判断是否为Intger对象,i:” + i);
case Student s -> System.out.println(“判断是否为具体学生对象,student:” + s.toString());
case UserCommonService -> System.out.println(“判断是否为普通用户实现类,然后走普通用户逻辑”);
case UserVipService -> System.out.println(“判断是否为vip用户实现类,然后走vip用户逻辑”);
default -> System.out.println(“Something else”); }
其他的都是无关紧要点