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 }