黑马程序员技术交流社区

标题: jdk14即将3月17日正式发布,提前尝鲜,获取jdk全网最全资源! [打印本页]

作者: 播妞    时间: 2020-3-10 10:10
标题: jdk14即将3月17日正式发布,提前尝鲜,获取jdk全网最全资源!
JDK 14即将在2020年3月17日正式发布啦!自JDK8正式启用之后,距离现在已经5年多时间了。5年时间里很多企业也都换上了JDK 8,随着JDK9-13的陆续发布,许多企业也进行了更新迭代,技术"尝鲜"。本次播妞为大家讲解JDK 14新特性的同时也准备了全网最全的JDK福利资源,帖子下方可见哦~
JDK 14官方计划
2019/12/12Rampdown Phase One (初始预备阶段)
2020/01/16Rampdown Phase Two(加速第二阶段)
2020/02/06Initial Release Candidate(初始阶段确定哪些新特性作为发行备选)
2020/02/20Final Release Candidate(最终确定哪些新特性作为发行备选)
2020/03/17General Availability(一般通用性,可视为发行出稳定版本的JDK新特性)
关于 JDK 14新特性预览相关介绍
JDK 14一共发行了16个JEP(JDK Enhancement Proposals,JDK 增强提案),即是筛选出的JDK 14新特性。
对于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件事:
这种模式的逻辑并不复杂,并且几乎所有Java程序员都可以理解。但是出于以下原因,上述做法并不是最理想的:
JDK 14提供了新的解决方案:新的instanceof模式匹配 ,新的模式匹配的用法如下所示,在instanceof的类型之后添加了变量str。如果instanceof对obj的类型检查通过,obj会被转换成str表示的String类型。在新的用法中,String类型仅出现一次。
具体描述
示例代码:
```java
public 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类展示了相关的用法。
```java
public 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运算符“匹配”规则如下:
以上是对JDK 14的第一个显著新特性做的一些讲解,其他特性介绍播妞已上传附件,大家可以直接在本帖上下载哦~
JDK 14.zip (324.44 KB, 下载次数: 305)
其他特性介绍后续将会录制视频做详细的讲解梳理做详细的介绍,敬请期待哦~最后为大家赠送上本次的福利资源全网最全的JDK8-JDK12资源全套分享;
从JDK8到JDK12的资源以及妥帖备好,添加播妞QQ3414556270即可获取~
JDK8-JDK12资源截图
JDK8-JDK12对应源码资料
对Java开发人员来说,最重要的无疑是:switch语句、文本块,intanceof的模式匹配操作,JDK 14还有更多的JEP新特性,我们将在后续的视频资源中做进行进一步的详细深入介绍,播妞也会及时为大家提供最新资源的,请大家持续关注哦!

作者: Port    时间: 2020-3-13 14:05

作者: xuanzuanmu    时间: 2020-3-14 15:05

作者: java哦    时间: 2020-4-7 12:09

作者: WinLinux    时间: 2020-4-21 16:30

作者: WinLinux    时间: 2020-4-21 16:31

作者: 蒋志豪    时间: 2020-8-11 13:14
好好学习天天向上,加油
作者: cn_abc    时间: 2020-8-31 08:40
好好学习




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2