本文主要是介绍JDK17新增的特性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.yield关键字:
从Java13开始引入,yield关键字用于从case的代码块中获取返回值。
正常从case的代码中获取返回值:
public static void main(String[] args) {
int x=1;
int result=0;
switch (x){case 1,2,3,4,5:result=10;break;case 10,20,30:result=20;break;default:result=30;
}System.out.println(result);}
注意:一个case语句后可多填几个常量
简化的switch-case语句接收返回值:
public static void main(String[] args) {int x=1;int result=switch (x){case 1->1;case 2->2;default -> 3;};System.out.println(result);}
简化后的switch-case语句接收返回值,改用了箭头指向返回值
不用箭头,用yield来接收返回值
public static void main(String[] args) {int x=1;int result=switch (x){case 1:yield 10;case 2:yield 2;default:yield 3;};System.out.println(result);}
与不简化的switch-case接收返回值相比,少了break语句,有了返回值
2.var关键字:
var a=10;var str="hello";var flag=true;var d=12.2;var f=12.2f;
使用var可以使代码更简洁。有时候,类型名称可能会非常长,例如泛型。var就像是一个简化器,让你不必反复写出繁琐的类型名。
使用注意事项:
1. 不能使用var来声明字段
2. 不能使用var来声明方法参数
3. 不能使用var来声明方法返回类型
4. var声明变量必须初始化,但是不能初始化为null
3.密封类
密封类一般应用在类和接口中,对接口和类的实现和继承进行约束。主要使用的关键字是 final 。当这个类被final修饰了,被修饰的类就变成完全封闭的状态了,所有类都没办法继承。 JDK17提供了一个新的关键字: sealed .密封类除了可以被该关键字修饰,并且在声明末尾用 permits 表示要开放给哪些类型。
情形:被sealed修饰的是密封类,必须子类,写permits 表示要开放给哪些类型,不写则开放给所有类
sealed class Person {private String name;private int age; } final class Student extends Person{ }non-sealed class Teacher extends Person{}
子类可以被final修饰:表示当前类不能被继承
子类被non-sealed修饰:表示当前类没有限制
子类被sealed修饰,和父类的情形一样
未被 permits 允许的类型,则没办法继承
4.接口中的私有方法
JDK9以后,接口里面可以实现私有方法
interface HelloService {public void sayHello();// 默认⽅法 default void saySomething(){syaEngHello();sayHello();};// 私有⽅法 private void syaEngHello(){System.out.println("Hello!");}
}
5.instanceof
if (obj instanceof String) {String str = (String) obj; ...
}
上面的instanceof语法一共做了三件事:
1. 判断是否为String类型;
2. 如果是,转成String类型;
3. 创建一个名为str的临时变量;在JDK16中,使用模式匹配思想改进了instanceof用法,可以做到以下优化效果:
if (obj instanceof String str) {// obj是否为String类型,如果是创建临时变量str }
这篇关于JDK17新增的特性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!