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 
 
}
  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
JDK 17Java Development Kit (JDK) 的一个版本,它于2021年9月发布。以下是 JDK 17 新增的一些特性: 1. Sealed Classes(密封类):密封类是一种限制继承的机制,可以控制哪些类可以继承自该类。通过使用 sealed 关键字来声明密封类,可以提供更严格的类继承关系。 2. Pattern Matching for Switch(Switch 表达式模式匹配):在 JDK 17 ,Switch 表达式得到了增强,可以使用模式匹配来简化代码。这样可以更方便地根据不同的模式执行相应的逻辑。 3. Sealed Interfaces(密封接口):与密封类类似,密封接口也是一种限制实现的机制。通过使用 sealed 关键字来声明密封接口,可以控制哪些类可以实现该接口。 4. Foreign Function & Memory API(外部函数和内存 API):JDK 17 引入了 Foreign Function & Memory API,它提供了与本地代码交互的能力,包括调用本地函数和直接操作内存等。 5. Strong encapsulation of JDK internals(JDK 内部的强封装):JDK 17 进一步加强了对 JDK 内部的封装,限制了对内部 API 的访问。这样可以提高代码的安全性和稳定性。 6. Deprecate and Remove Experimental GCs(废弃和除实验性 GC):JDK 17 废弃了一实验性的垃圾回收器,并计划在未来版本将其移除。这样可以减少维护成本,提高垃圾回收器的稳定性。 7. New macOS Rendering Pipeline(新的 macOS 渲染管道):JDK 17 引入了一个新的 macOS 渲染管道,用于提供更好的图形渲染性能和体验。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值