Java17

发布时间 2023-10-04 18:46:16作者: lwx_R

1.同时配置Java8和17环境

用户变量

2.新特性

public static void main(String[] args) {
        // 1.文本框
        String text = """
                {
                  "name": "小黑说Java",
                  "age": 18,
                  "address": "北京市西城区"
                }
                """;
        System.out.println(text);

        // 2.Switch
        String f = "a";
        switch (f) {
            case "a" -> System.out.println("a");
            case "b" -> System.out.println("b");
            default -> System.out.println("c");
        }
        // 返回值
        String res = switch (f) {
            case "a" -> "a";
            case "b" -> "b";
            default -> "c";
        };
        System.out.println(res);
        // 做多件事 yield返回
        String res1 = switch (f) {
            case "a" -> {
                System.out.println("a");
                yield "a";
            }
            case "b" -> "b";
            default -> "c";
        };
        System.out.println(res1);

        // 3.record关键字 用于创建不可变的数据类
        Person person1 = new Person("lwx1");
        Person person2 = new Person("lwx2");

        record PersonRecord(String name) {
            // 构造方法
            PersonRecord {
                System.out.println("PersonRecord构造方法");
            }
        }

        PersonRecord personRecord1 = new PersonRecord(person1.getName());
        PersonRecord personRecord2 = new PersonRecord(person2.getName());
        System.out.println(personRecord1);
        System.out.println(personRecord2);

        // 4.sealed class 密封类
        // 更好的控制哪些类可以对我定义的类进行扩展
        // 可以控制有哪些类可以对超类进行继承,

        // 5.instanceof 模式匹配
        // 对一个变量的类型进行判断,如果符合指定的类型,则强制类型转换为一个新变量。
        Object o = new Object();
        if (o instanceof Fruit fruit) {
            System.out.println("This furit is :" + fruit.getName);
        }

        // 6.Helpful NullPointerExceptions
        // 准确显示发生NPE的精确位置

        // 7.日期周期格式化 指示一天时间段
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("B");
        System.out.println(dtf.format(LocalTime.of(8, 0)));
        System.out.println(dtf.format(LocalTime.of(13, 0)));
        System.out.println(dtf.format(LocalTime.of(20, 0)));
        System.out.println(dtf.format(LocalTime.of(23, 0)));
        System.out.println(dtf.format(LocalTime.of(0, 0)));

        // 8.精简数字格式化支持
        NumberFormat fmt = NumberFormat.getCompactNumberInstance(Locale.ENGLISH, NumberFormat.Style.SHORT);
        System.out.println(fmt.format(1000));
        System.out.println(fmt.format(100000));
        System.out.println(fmt.format(1000000));

        // 9.Stream.toList()
        Stream<String> stringStream = Stream.of("a", "b", "c");
        List<String> stringList =  stringStream.toList();
        for(String s : stringList) {
            System.out.println(s);
        }
    }
  • 密封类
// 不想让Fruit在该包以外被扩展 通过关键字sealed声明为密封类,通过permits可以指定Apple,Pear类可以进行继承扩展。
// 子类指明是final,non-sealed或sealed的
public abstract sealed class Fruit permits Apple {

}
public non-sealed class Apple extends Fruit {
}