当前位置:首页 » 《随便一记》 » 正文

数据结构(JAVA)JDK17语法新增特性

1 人参与  2024年10月27日 18:41  分类 : 《随便一记》  评论

点击全文阅读


目录

yield关键字var关键字空指针异常密封类接口中的私有方法instanceof其他


yield关键字

yield关键字用于case的代码块中返回值。
正常switch语句

    public static void main(String[] args) {        int result = 0;        String str = "a";        switch (str) {            case "a" :                result = 65;                break;            case "b" :                result = 66;                break;            case "c" :                result = 67;                break;            default:                result = -1;        }        System.out.println(result);    }

简化的switch语句

    public static void main(String[] args) {        String str = "a";        int result = switch (str) {            case "a" -> 65;            case "b" -> 66;            case "c" -> 67;            default -> -1;        };        System.out.println(result);    }

yield关键字版本

    public static void main(String[] args) {        String str = "a";        int result = switch (str) {            case "a" : yield 65;            case "b" : yield 66;            case "c" : yield 67;            default  : yield -1;        };        System.out.println(result);    }

var关键字

var关键字可以使代码更加简洁,有时类型名称长时,就可以使用var来代替。

    public static void main(String[] args) {        Map<String, List<Map<Integer, String>>> complexMap = new HashMap<String,                List<Map<Integer, String>>>();        var complexMap2 = new HashMap<String, List<Map<Integer, String>>>();    }

注意:

不能用var来声明字段。
在这里插入图片描述不能使用var来声明方法参数。
在这里插入图片描述不能使用var来声明方法返回类型。
在这里插入图片描述var声明变量必须初始化,但是不能初始化为null。
在这里插入图片描述

空指针异常

JDK8;报空指针异常不会解释原因。
在这里插入图片描述
JDK17;报空指针异常会解释原因。
在这里插入图片描述

密封类

在之前的学习中,我们了解到一个类不想被继承,需要在类之前加final关键字。
在JDK17中提供了⼀个新的关键字: sealed .密封类除了可以被该关键字修饰,并且在声明末尾用
permits 表⽰要开放给哪些类型。
例如,Class为密封类,然后使用 permits 关键字,把继承权限开放给了Student类。

sealed class Class permits Student{    public String class_id;    public Class (String class_id){        this.class_id = class_id;    }}//继承的类也要加上密封限制 non-sealed 表⽰不限制non-sealed class Student extends Class{    public String name;    public String student_id;    public Student(String class_id,String name, String student_id) {        super(class_id);        this.name = name;        this.student_id = student_id;    }}

总结

sealed修饰的类必须要有⼦类。使⽤non-sealed关键字修饰。表⽰不限制,任何类都可以继承。未被 permits 允许的类型,则没办法继承。
在这里插入图片描述

接口中的私有方法

Java8,接口可以有默认方法。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;}

instancof语法⼀共做了三件事:

判断是否为String类型;如果是,转成String类型;创建⼀个名为str的临时变量;
JDK16 优化后的效果。
if (obj instanceof String str) {// obj是否为String类型,如果是创建临时变量str}

其他

还有很多方法,但对我们初学者不常有,等以后自行探索。


点击全文阅读


本文链接:http://zhangshiyu.com/post/178691.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1