您的位置:首页 > 文旅 > 美景 > JDK17新增的特性

JDK17新增的特性

2024/12/23 15:35:50 来源:https://blog.csdn.net/2301_80251684/article/details/139500742  浏览:    关键词: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 }

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com