当我从jdk8过渡到jdk17有哪些明显的变化
Posted yuec1998
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当我从jdk8过渡到jdk17有哪些明显的变化相关的知识,希望对你有一定的参考价值。
当我从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
略。
待完善,评论区可补充~
以上是关于当我从jdk8过渡到jdk17有哪些明显的变化的主要内容,如果未能解决你的问题,请参考以下文章