【数据结构与算法】Java描述:JDK17新增常用特性
JDK17新增 常用 特性介绍
前言:
从springboot3.0开始,已经不支持JDK8了。
参考资料,来自官方博客:https://spring.io/blog/2022/01/20/spring-boot-3-0-0-m1-is-nowavailable?spm=a2c6h.12873639.article-detail.24.766d46b40LM1IV
从3.0开始,转变为JDK17。
JDK 17 是 LTS (长期支持版),可以免费商用到 2029 年。而且将前面几个过渡版(JDK 9-JDK 16)去其糟粕,取其精华的版本;
所以这篇文章我们来介绍一些在JDK8以后的新特性
一、yield关键字
yield关键字,从Java13开始引入,yield关键字用于从case的代码块中返回值。
我们·先看一个正常的 switch 语句
public static void main(String[] args) {
String data = "one" ;
int result = 0 ; // 接收数据的返回值
switch (data) {
case "one":
result = 1 ; // 为result重新赋值
break ;
case "two":
result = 2 ; // 为result重新赋值
break ;
default:
result = -1 ; // 为result重新赋值
break ;
}
System.out.println(result) ;
}
可以对这个代码做简化处理
public static void main(String[] args) {
String data = "one" ;
int result = switch (data) {
case "one"->1;
case "two"->2; //指向符->
default->-1;
};
System.out.println(result) ;
}
新的关键字 yield 可以替换简写代码中的 指向符->,替换之后的代码
public static void main(String[] args) {
String data = "one" ;
int result = switch (data) {
case "one" : yield 1;
case "two": yield 2;
default : yield -1;
};
System.out.println(result) ;
}
二、var 关键字
从Java10开始,var被引⼊
var name = "zhangsan";
var age = 10;
可以看到我们的变量定义时,没有加类型,编译器会自动推断出name是⼀个String类型,age是⼀个int类型。
它的用处在于泛型定义的类有繁杂的类型名,我们可以使用 var 来代替掉,使代码变得简洁。
但是使用 var 需要注意以下几个问题
1. 不用来声明成员变量(字段)
2. 不能用于 方法的 参数/返回类型
3. var 声明的局部变量 必须 初始化,且不能初始化为 null
三、密封类 sealed 关键字
JDK17提供了⼀个新的关键字: sealed 密封类除了可以被该关键字修饰,并且在声明末尾用
permits 表示要开放给哪些类型。
// sealed 关键字
sealed class Animal permits Dog,PetDog {//指定两个类可以继承,其他不行
public String name;
public int age;
public void eat() {
System.out.println("eat()....");
}
}
non-sealed class Dog extends Animal {
@Override
public void eat() {
System.out.println(this.name+ "正在吃狗粮....");
}
}
non-sealed class PetDog extends Animal {
}
//最简单的用法就是这样,乱改不符合要求,很麻烦
四 、接口中的封装方法
Java 8,接口 可以有默认方法。Java9之后,可以在接口内实现私有方法实现。
interface HelloService {
public void sayHello();
// 默认⽅法
default void saySomething(){
syaEngHello();
sayHello();
};
// 私有⽅法
private void syaEngHello(){
System.out.println("Hello!");
}
}
注意点:接口中的私有方法只能在接口内部使用
五、 instanceof 关键字
比如以下常见的代码:
if (obj instanceof String) {
String str = (String) obj;
...
}
4上⾯的instancof语法⼀共做了三件事:
1. 判断是否为String类型;
2. 如果是,转成String类型;
3. 创建⼀个名为str 的临时变量;
在JDK16中,使⽤模式匹配思想改进了instanceof 用法,可以做到以下优化效果:
if (obj instanceof String str) {
// obj是否为String类型,如果是创建临时变量str
}

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)