1、jdk17对swtich语句的增强
#JDK17之前
String name = "周瑜";
String country =switch (name) {
case "周瑜","徐庶" ->{
System.out.println("可以在{}中执行代码块!!");
yield "三国";
}
case "项羽","刘邦" ->"汉朝";
default -> "未知";
};
}
#JDK17之后
private static String TestPatternMatchSwitch(Object o) {
return switch (o) {
case null -> "o is null ! ";
case Integer i-> String.format("Integer i : %s",i);
case Long l -> String.format("Long l : %s",l);
case Double d -> String.format("Double d : %d",d);
case String s -> String.format("String s: %s",s);
default -> o.toString();
};
}
2、恶心的字符串拼接终于解决了
public static void main(String[] args) {
//JDK 17之前对多行字符串处理方式
String html = "<html>\n" +
" <body>\n" +
" <h1>Hello,World!</h1>\n" +
" </body>\n" +
"</html>\n";
// JDK17及以后版本对多行字符串处理方式 例如拼接SQL、JSON、Html
// \ 两行拼接为一行,\s添加空格
String html2 = """
<ht\
ml>
<body>
<h1>H\sello,World!</h1>
</body>
</html>
""";
System.out.println(html);
System.out.println(html2);
}
3、instanceof增强
// jdk17之前
Object o ="1";
if (o instanceof Integer){
Integer i = (Integer) o;
System.out.println(i.intValue());// object 转int
}else if (o instanceof String) {
String s = (String) o;
System.out.println(s.charAt(0));// 返回字符串s 下标为0的字符
}
// jdk17 之后
Object o1 = 1;
if (o instanceof Integer i){
System.out.println(i.intValue());
}else if (o instanceof String s) {
System.out.println(s.charAt(0));
}
4、java限制子类集成,防止子类变父类
sealed 关键字 修饰父类,限制子类只能是特定的类型 比如定义一个抽象类animal,只允许Dog、Cat类继承(注意父类子类要在同一个包)
5、jdk居然有自己的Lombok功能?
public record RecordUser(Long id, String name) {
//帮助生成全参构造方法(没有无参构造方法),和获取属性方法,注意声明属性只能在类名后的()中
// 相当于只读的Lombok
}
6、妈妈再也不担心我找不到空指针异常了
在项目中我们遇到nullpoiontexception时 控制台只能定位到对应的行,但一行内调用多个对象 我们要逐一排查....
现在使用JDK17 控制台中异常日志可以定位到具体哪个对象或方法了!
7、ZGC很强
一般jvm gc垃圾回收 会触发STW 线程停止一段时间 造成系统卡顿情况 zgc的卡顿在10ms以内 系统吞吐量可以达到一个很好的效果
ZGC的使用:
添加以下JVM选项即可开启ZGC:
-XX:+USeZGC