当我从jdk8过渡到jdk17有哪些明显的变化


注:文中很多功能并不是jdk17才有的新功能,而是阐述我在jdk8过渡到jdk17的过程中,对我编程带来的新特性的感受 ~

1、jshell的便利

在这里插入图片描述
jshell并不是jdk17才有的功能,有些时候你会爱上他,例如有时候想写一段测试的代码,你得打开idea,然后在原项目里面建一个类并在main方法里面写下你的demo,写完还要编译运行,但是有了jshell,你只需要双击打开,就可以直接在界面进行编程,而且功能十分强大
在这里插入图片描述
编辑器重度依赖,没有提示?按下tab,也会有的提示的
在这里插入图片描述
你也可以输入/help,查看jshell还有哪些的功能
在这里插入图片描述

2、var 语法糖的引入

var并不是java关键字,是一个语法糖,可以在代码书写过程中节省很多代码工作量,例如我们新建一个类,我们不再需要Object o = new Object(); 可以利用var语法,根据等号右边的对象类型自己推断生成对应类型。
在这里插入图片描述
而且var新建的变量只会根据等号右边的类型进行推断生成,并且如果var的右边是数字(整形),那么会生成基本类型int,而不是Integer
在这里插入图片描述

3、文本块的引入

    @Test
    void testStr(){
        String txtOld = "{\n" +
                "\"name\":\"网站\",\n" +
                "\"num\":3,\n" +
                "\"sites\":[ \"Google\", \"FileFox\", \"Edge\" ]\n" +
                "}";
        System.out.println(txtOld);
        String txtNew = """
                {
                "name":"网站",
                "num":3,
                "sites":[ "Google", "Runoob", "Taobao" ]
                }
                """;
        System.out.println(txtNew);
    }

输出结果:在这里插入图片描述
使用3个引号 “”“文本”"" 代表文本块的输入,同时还有2种转义,使用“\”可以取消换行,“\s”可以增加空格

    @Test
    void testStr() {
        String txtOld = "{\n" + "\"name\":\"网站\",\n" + "\"num\":3,\n" + "\"sites\":[ \"Google\", \"FileFox\", \"Edge\" ]\n" + "}";
        System.out.println(txtOld);
        String txtNew = """
                {\s\
                "name":"网站",\
                "num":3,\
                "sites":[ "Google"]\s\
                }\
                """;
        System.out.println(txtNew);
    }

输出结果:

{ "name":"网站","num":3,"sites":[ "Google"] }

4、switch表达式

使用->来代替以前的break

    @Test
    void testSwitch(){
        Week day = Week.FRIDAY;
        switch (day){
            case MONDAY,TUESDAY,WEDNESDAY,THURSDAY -> System.out.println("red");
            case FRIDAY -> System.out.println("yellow");
            case SATURDAY,SUNDAY -> System.out.println("green");
            default -> throw new IllegalStateException("what day is today?"+day);
        }
    }

引入了yield关键字,类似于return返回结果值

    @Test
    void testSwitch() {
        Week day = Week.FRIDAY;
        String mood = switch (day) {
            case MONDAY, TUESDAY, WEDNESDAY, THURSDAY -> "red";
            case FRIDAY -> "yellow";
            case SATURDAY, SUNDAY -> "green";
            default -> {
                if (day == null) {
                    throw new NullPointerException("you input null");
                } else {
                    System.out.println("what day is today?" + day);
                    yield "blue";
                }
            }
        };
        System.out.println("your mood color is " + mood);
    }

5、records的引入

与我们用lombok注解的功能一致。但个人还是习惯在实体类上使用@Data注解,因为如果参数多了,这种写法一点都不优雅,并且缺少对参数的注解
![在这里插入图片描述](https://img-blog.csdnimg.cn/13cf0eabaed94c5588dde85916cb8d05.png

/**
 * 类似于
 * @Data
 * public class Person{
 *     private String name;
 *     private Integer age;
 * }
 */
public record Person(String name ,Integer age) {
}

    @Test
    void testRecord(){
        Person yuec = new Person("yuec", 123);
        System.out.println(yuec);
    }

输出结果:

Person[name=yuec, age=123]

6、ZGC

略。

待完善,评论区可补充~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百里东君~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值