【JavaSE】JDK17的一些特性

【JavaSE】JDK17的一些特性

码农世界 2024-06-13 后端 80 次浏览 0个评论

前言

从springboot3.0开始,已经不⽀持JDK8了

选⽤Java17,概括起来主要有下⾯⼏个主要原因

  • JDK17是LTS(⻓期⽀持版),可以免费商⽤到2029年。⽽且将前⾯⼏个过渡版(JDK9-JDK16) 去其糟粕,取其精华的版本
  • JDK17性能提升不少,⽐如重写了底层NIO,⾄少提升10%起步;
  • ⼤多数第三⽅框架和库都已经⽀持,不会有什么⼤坑;

    【JavaSE】JDK17的一些特性

    欢迎关注个人主页:逸狼


    创造不易,可以点点赞吗~

    如有错误,欢迎指出~



    目录

    前言

    yield关键字

    密封类

    接口中的私有方法

    instanceof


yield关键字

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

【JavaSE】JDK17的一些特性

 简化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关键字代替->

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

var关键字

从Java10开始,var被引⼊

用于自动推导代码的类型,例如下面代码,编译器会⾃动推断出name是⼀个String类型,age是⼀个int类型。

    public static void main(String[] args) {
        var name ="zhangsan";
        var age =10;
    }

使⽤var可以使代码更简洁。有时候,类型名称可能会⾮常⻓,例如泛型。var就像是⼀个简化器,让 你不必反复写出繁琐的类型名。

例如下面代码中var根据后面的HashMap>>()自动推导类型 ,即这里的var代表Map>> 类型

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

注意:

  • 不能使⽤var来声明字段
  • 不能使⽤var来声明⽅法参数
  • 不能使⽤var来声明⽅法返回类型
  • var声明变量必须初始化,但是不能初始化为null

    密封类

    用fianl修饰的类不能被继承。

    JDK17提供了⼀个新的关键字: sealed .密封类除了可以被该关键字修饰,并且在声明末尾⽤ permits 表⽰要开放给哪些类型。

    //这里的sealed表示密封类,与fianl不同的是,它可以使用permits开放给一些类继承
    sealed class Person permits YL{
    }
    //继承的类也要加上密封限制 non-sealed 表⽰不限制
    non-sealed class YL extends Person{
    }

    注意:

    sealed修饰的类必须要有⼦类

    使⽤ non-sealed 关键字修饰。表⽰不限制,任何类都可以继承。

    未被 permits 允许的类型,则没办法继承

    sealed class Animal permits Dog,Cat {
     public String name;
     public int age;
     public void eat() {
     System.out.println("eat()....");
     }
    }
    sealed class Cat extends Animal permits OrgCat{
     
    }
    non-sealed class OrgCat extends Cat {
     
    }
    

    接口中的私有方法

    Java8,接⼝可以有默认⽅法。Java9之后,可以在接⼝内实现私有⽅法实现。

    interface Hello{
        //默认方法
        default void saySomething(){
            
        }
        //私有方法
        private void sayEngHello(){
            System.out.println("Hello!");
        }
    }

    instanceof

    if (obj instanceof String) {
     String str = (String) obj; 
     ...
    }
    

    上⾯的instancof语法⼀共做了三件事

    1. 判断是否为String类型;
    2. 如果是,转成String类型;
    3. 创建⼀个名为str的临时变量;

    在JDK16中,使⽤模式匹配思想改进了instanceof⽤法,可以做到以下优化效果:

    if (obj instanceof String str) {// obj是否为String类型,如果是创建临时变量str 
     
    }

转载请注明来自码农世界,本文标题:《【JavaSE】JDK17的一些特性》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,80人围观)参与讨论

还没有评论,来说两句吧...

Top