当前位置: 首页 > article >正文

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

目录

  • 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>>>();
    }

注意:

  1. 不能用var来声明字段。
    在这里插入图片描述
  2. 不能使用var来声明方法参数。
    在这里插入图片描述
  3. 不能使用var来声明方法返回类型。
    在这里插入图片描述
  4. 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;
    }
}

总结

  1. sealed修饰的类必须要有⼦类。
  2. 使⽤non-sealed关键字修饰。表⽰不限制,任何类都可以继承。
  3. 未被 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语法⼀共做了三件事:

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

其他

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


http://www.kler.cn/a/369016.html

相关文章:

  • 【C++】STL初识
  • 【CSS3】css开篇基础(4)
  • Kaggle竞赛——灾难推文分类(Disaster Tweets)
  • 大数据Azkaban(二):Azkaban简单介绍
  • asp.net Core日志 ILoggerFactory、ILogger、ILoggerProvider
  • STM32之外部中断(实验对射式传感器计次实验)
  • java spark解决文件读取乱码问题
  • rtp协议:rtcp包格式和传输间隔
  • 【Python】Python面向对象编程进阶:继承、多态与封装
  • 01,http 协议
  • 【开源鸿蒙】OpenHarmony 5.0轻量系统最小开发环境搭建
  • DC-9靶场渗透
  • 等保测评与风险管理:识别、评估和缓解潜在的安全威胁
  • GSM850分几个Channel,为什么这样分?
  • Spring源码解析(35)之Spring全体系源码流程图
  • Kaggle竞赛——灾难推文分类(Disaster Tweets)
  • 信息安全入门——网络安全威胁
  • MySQLDBA修炼之道-开发篇(二)
  • 线性可分支持向量机的原理推导 9-29对偶可行性条件 公式解析
  • 8.Linux按键驱动-中断下半部
  • MySQL 指定字段排序二
  • 华为原生鸿蒙操作系统:我国移动操作系统的新篇章
  • XCode16.0 Command PhaseScriptExecution failed with a nonzero exit code 的错误
  • 学生宿舍管理信息化:Spring Boot系统研究
  • 【go】仅设想,能不能通过pure go编写页面。
  • springboot095学生宿舍信息的系统--论文pf(论文+源码)_kaic