我的JDK17学习文档

发布时间 2023-12-30 16:22:51作者: Only_Aptx-4869

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限制子类集成,防止子类变父类

image
sealed 关键字 修饰父类,限制子类只能是特定的类型 比如定义一个抽象类animal,只允许Dog、Cat类继承(注意父类子类要在同一个包)
image

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

8、其他介绍后续更新

9、内容来源于https://www.bilibili.com/video/BV1j24y1K7x6/?p=2&spm_id_from=pageDriver&vd_source=b36501448a2ead9a061e0ea2c620b818