我的JDK17学习文档
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
 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号