JDK17语法新增特性

一.前言

        从springboot3.0开始,已经不⽀持JDK8了。

        从3.0开始,转变为JDK17。

        

        官⽅维护的版本都是SpringBoot3.X的了,但是之前的版本也是可以⽤的,只是官⽅不再进⾏功能更新了。

综上所述,选⽤Java17,概括起来主要有下⾯⼏个主要原因:

1. JDK17是LTS(⻓期⽀持版),可以免费商⽤到2029年。⽽且将前⾯⼏个过渡版(JDK9-JDK16)
去其糟粕,取其精华的版本;

2. JDK17性能提升不少,⽐如重写了底层NIO,⾄少提升10%起步;

3. ⼤多数第三⽅框架和库都已经⽀持,不会有什么⼤坑;

二.一些新增的特性

        2.1 yield关键字:

        yield关键字,从Java13开始引⼊。yield关键字⽤于从case的代码块中返回值。

        正常的switch语句。

        

简化后的switch语句

        如果不想使⽤指向符->可以使⽤yield来代替:

        

2.2 var关键字

        从Java10开始,var被引⼊

        

        他会根据后面的东西来判断类型。

为什么使⽤var?

        使⽤var可以使代码更简洁。有时候,类型名称可能会⾮常⻓,例如泛型。var就像是⼀个简化器,让你不必反复写出繁琐的类型名。

        可以直接用var代替。

使⽤注意事项:
1. 不能使⽤var来声明字段。

        也就是不能声明成员变量。
2. 不能使⽤var来声明⽅法参数。


3. 不能使⽤var来声明⽅法返回类型。

        
4. var声明变量必须初始化,但是不能初始化为null。

        

        它无法通过null来判断类型。



2.3 密封类

        密封类⼀般应⽤在类和接⼝中,对接⼝和类的实现和继承进⾏约束。主要使⽤的关键字是 final 。当这个类被 final 修饰了,被修饰的类就变成完全封闭的状态了,所有类都没办法继承。
JDK17提供了⼀个新的关键字: sealed .密封类除了可以被该关键字修饰,并且在声明末尾⽤
permits 表⽰要开放给哪些类型。

        sealed关键字

        为什么报错呢?

        原因就是:被sealed修饰的必须有子类。

        

        上面不报错了下面报错了。

        原因就是,简单来说就是继承了sealed类,子类必须被sealed,non-sealed,final其中一个修饰。

用sealed修饰的话dog还得有子类。

        用这两个关键字修饰就不需要再被继承了,用non-sealed修饰,其他类还可以继承dog类,但是用final修饰的话,其他类则无法继承dog类,dog类就无法作为子类了。

permits关键字

        permits要结合sealed使用,无法单独使用。

        此时用了permits关键字的话,表示Anminal类只能被dog类继承,其他类无法继承。

        如果想要cat继承,就在dog后面加上cat即可。

Java8,接可以有默认⽅法。Java9之后,可以在接⼝内实现私有⽅法实现。

2.4 接口的私有方法

        接口原本只有default才能有方法体,Java8之后,私有方法也可以有方法体了。

2.5 instanceof

        我们常见的

上⾯的instancof语法⼀共做了三件事:
1. 判断是否为String类型;
2. 如果是,转成String类型;
3. 创建⼀个名为str的临时变量;

        可能有人会有疑惑,既然它都是String类型了为什么还要强转。

        下面是一个例子

        Object类型的变量中什么都可以放,但是他不是一个纯正了String类型,虽然通过instanceof判断的是String类型,但是它仍然需要强制类型转换,类似于向下转型。


在JDK16中,使⽤模式匹配思想改进了instanceof⽤法,可以做到以下优化效果:

     

        2.6 其他

        其他还有很多,就不一一列举了,只列举一些常用的。

        不常用的还有

1. ZGC-新⼀代垃圾回收器、G1垃圾回收器相关等等。
2. record类的使⽤。
3. StreamAPI的部分改进。
4. HttpClient 重写了,⽀持HTTP2.0。
5. ⽀持List.of()、Set.of()、Map.of()和Map.ofEntries()等⼯⼚⽅法实例化对象。

        三.结束语

         感谢大家的查看,希望可以帮助到大家,做的不是太好还请见谅,其中有什么不懂的可以留言询问,我都会一一回答。  感谢大家的一键三连。

  • 17
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值