当我从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
略。
待完善,评论区可补充~