JDK17语法新增特性(常用)

1、yield 关键字

yield 关键字从Java13开始引入,用于从case的代码块中返回值

示例:

正常的switch语句:

    public static void main(String[] args) {
        String data = "one";
        int result = 0;//接收数据的返回值
        switch(data) {
            case "one":
                result = 1;//为result重新赋值
                break;
            case "two":
                result = 2;//为result重新赋值
                break;
            default:
                result = -1;
                break;
        }
        System.out.println(result);
    }

简化后的switch:

    public static void main(String[] args) {
        String data = "one";
        int result = switch(data) {
            case "one" -> 1;
            case "two" -> 2;
            default -> -1;
        };
        System.out.println(result);
    }

使用yield关键字的switch:

    public static void main(String[] args) {
        String data = "one";
        int result = switch(data) {
            case "one" : yield 1;
            case "two" : yield 2;
            default : yield -1;
        };
        System.out.println(result);
    }

2、var关键字

var 关键字从Java10开始引入,可以自动识别类型

var name = "zhangsan";
var age = 10;

上述代码中,编译器会自动判断出name时一个String类型,age是一个int类型

使用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

3、密封类

密封类一般应用在类和接口中,对接口和类的实现和继承进行约束

主要使用的关键字是final,当该类被final修饰,被修饰的类就变成密封类,无法被其他类所继承

JDK17提供了一个新的关键字:sealed,密封类可以被该关键字修饰,并且可以在声明末尾用使用permits表示要开放给哪些类型继承

下面代码Animal为密封类,然后使用permits关键字,把继承权限1开放给Dog类

sealed class Animal permits Dog{

}
non-sealed class Dog extends Animal{

}

tips:

1、sealed修饰的类必须要有子类

2、使用 non-sealed 关键字修饰,表示不限制,任何类都可以继承

3、若示例中Animal声明中没写permits,则所有类均可继承Animal;若写了,则未被permits允许的类,无法继承Animal

permits可声明多个类,上述错误代码可改为如下:

4、复杂的特殊写法

4、接口中的私有方法

Java8中,接口可以有默认方法。Java9之后,可以在接口内实现私有方法

interface HelloService {
    public void sayHello();

    //默认方法
    default void saySomething() {
        sayEngHello();
        sayHello();
    };

    //私有方法
    private void sayEngHello() {
        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

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值