JDK14将于3月17日正式发布,技术“尝鲜”看这里

作者 : 开心源码 本文共2555个字,预计阅读时间需要7分钟 发布时间: 2022-05-13 共215人阅读

JDK 14即将在2020年3月17日正式发布啦!自JDK8正式启用之后,距离现在已经5年多时间了。5年时间里很多企业也都换上了JDK 8,随着JDK9-13的陆续发布,许多企业也进行了升级迭代,技术”尝鲜”。

关于 JDK 14新特性预览相关详情

JDK 14一共发行了16个JEP(JDK Enhancement Proposals,JDK 加强提案),即是挑选出的JDK 14新特性。

  • 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)

对于JDK 14新特性的深入了解

黑马程序员针对JDK 14准备发行的第一个明显新特性做少量讲解,让大家提前理解一下JDK 14其它新特性将在后期的视频中做详细的讲解梳理。

JEP 305: instanceof的模式匹配 (预览)

305: Pattern Matching for instanceof (Preview)

引入

JEP 305新添加了使instanceof运算符具备模式匹配的能力。模式匹配能够使程序的通用逻辑更加简洁,代码更加简单,同时在做类型判断和类型转换的时候也更加安全,黑马程序员也给详细讲解了一下。

设计初衷

几乎每个程序员都见过如下代码,在包含判断表达式能否具备某种类型的逻辑时,程序会对不同类型进行不同的解决。我么来看一下熟习的instanceof-and-cast用法:

java// 在方法的入口接收一个对象public void beforeWay(Object obj) {    // 通过instanceof判断obj对象的真实数据类型能否是String类型    if (obj instanceof String) {        // 假如进来了,说明obj的类型是String类型,直接进行强制类型转换。        String str = (String) obj;        // 输出字符串的长度        System.out.println(str.length());    }}

这段程序做了3件事:

  • 先判断obj的真实数据类型
  • 判断成立后进行了强制类型转换(将对象obj强制类型转换为String)
  • 公告一个新的本地变量str,指向上面的obj

这种模式的逻辑并不复杂,并且几乎所有Java程序员都可以了解。但是出于以下起因,上述做法并不是最理想的:

  • 语法臃肿乏味
  • 同时执行类型检测校验和类型转换。
  • String类型在程序中出现了3次,但是最终要的可能只是一个字符串类型的对象变量而已。
  • 重复的代码过多,冗余度较高。

JDK 14提供了新的处理方案:新的instanceof模式匹配 ,新的模式匹配的用法如下所示,在instanceof的类型之后增加了变量str。假如instanceof对obj的类型检查通过,obj会被转换成str表示的String类型。在新的用法中,String类型仅出现一次。

具体形容示例代码:

javapublic void patternMatching(Object obj) {    if (obj instanceof String str) {              // can use str here        System.out.println(str.length());    } else {        // can't use str here    }}

上述代码需要注意:
假如obj是String类型,则将obj类型转换为String,并将其赋值给变量str。绑定的变量作用域为if语句内部,并不在false语句块内。

接下来我们看一下它的另一个做法:
通常equals()方法的实现都会先检查目标对象的类型。instanceof的模式匹配可以简化equals()方法的实现逻辑。下面代码中的Student类展现了相关的用法。

javapublic class Student {  private  String name ;  public Student(String name) {    this.name = name;  }//    @Override//    public boolean equals(Object o) {//        if (this == o) return true;//        if (o == null || getClass() != o.getClass()) return false;//        Student student = (Student) o;//        return Objects.equals(name, student.name);//    }     // 简化后做法!    @Override  public boolean equals(Object obj) {    return (obj instanceof Student s) && Objects.equals(this.name, s.name);  }    @Override    public int hashCode() {        return Objects.hash(name);    }}

小结

instanceof运算符“匹配”规则如下:
假如obj是String类型,则将obj类型转换为String,并将其赋值给变量str。绑定的变量作用域为if语句内部,并不在false语句块内。
到这儿,有肯定Java基础的同学应该看出来的JDK 14后的instanceof的模式匹配极大的简化了类型检查和转型的问题。

其余新特性

以上是对JDK 14的第一个明显新特性做的少量讲解,其余特性详情以及免费资源获取:

JDK14 将于3月17日正式发布,提前尝鲜,获取JDK全网最全资源(点击领取)

对Java开发人员来说,最重要的无疑是:switch语句、文本块,intanceof的模式匹配操作,JDK 14还有更多的JEP新特性,黑马程序员将在后续的视频资源中做进行进一步的详细深入详情,笔者也会及时为大家提供最新资源的,请大家持续关注哦!

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » JDK14将于3月17日正式发布,技术“尝鲜”看这里

发表回复