美文网首页Java
Java14新特性

Java14新特性

作者: TZX_0710 | 来源:发表于2021-06-29 10:51 被阅读0次

    Java14新特性

    Java14已如期于2020年3月17日正式发布。这一个版本中主要带来了ZGC增强、instanceof增强,switch表达式 标准本、增强和新功能。

    instanceof模式匹配(预览阶段)

    1. 对instanceof 进行改进,由原来的检查对象类型。变成了先对对象进行类型匹配,校验成功之后转换成 对应类型,然后再复制给局部变量,并且只有当模式匹配表达式匹配成功才会生效喝复制。局部变量只能在当前代码块使用
    if (person instanceof Student student) {
        student.say();
       // other student operations
    } else if (person instanceof Teacher teacher) {
        teacher.say();
        // other teacher operations
    }
    

    G1的NUMA可识别内存分配

    1. 改进非一致性系统内存访问的G1垃圾收集器整体性能,主要针对年轻代内存分配优化.
    2. 创建新对象->分配内存->存放内存(region)->(支持NUMA)分配当前线程NUMA节点空闲内存区。基于同一个对象创建调用频率较高,存活时间短(能够提高一些大型计算机的G1内存分配回收性能)
    3. 启动可识别内存分配-XX:+UseNUMA

    改进NullPointExceptions提示信息

    1. 改进空指针提示信息 帮助我们更加直观找到 Null变量

        public static void main(String[] args) {
              String str=null;
              System.out.println(str.length());
          }
          
          //Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.length()" because "str" is null
         at com.study.TestPros.main(TestPros.java:7)
      
      

    Record类型(预览功能)

    1. Java14引入了record类型 支持更加紧凑的方式去声明一个类,而这些类能够作为不可变数据类型的封装持有者。
    public class TestPros {
    
        public static void main(String[] args) {
        }
    
        public record person(String name, int age) {
            public String getName() {
                return this.name;
            }
    
            public int getAge() {
                return age;
            }
        }
    }
    
    

    反编译结果

    public class TestPros {
        public TestPros() {
        }
    
        public static void main(String[] args) {
        }
    
        public static record person(String name, int age) {
            public person(String name, int age) {
                this.name = name;
                this.age = age;
            }
    
            public String getName() {
                return this.name;
            }
    
            public int getAge() {
                return this.age;
            }
    
            public String name() {
                return this.name;
            }
    
            public int age() {
                return this.age;
            }
        }
    }
    
    
      • 1个有参构造函数
      • 获取属性值的方法
      • 自定义的获取name和age方法
      • 不能再record声明的类中定义示例字段,类也不能声明为抽象类

    Java14引入了record类,所以在java.lang.Class引入了2个新方法

    RecordComponent[] getRecordComponents()
    boolean isRecord()
    

    Switch表达式正式版

    switch表达式在Java14当中更新未正式版本,结束了在Java12 和Java13的预览版本。

    注:

    1. 需要保持与之前 switch 语句同样的 case 分支情况
    2. 使用 yield 关键字来返回 case 分支需在 Java 14 表达式中,表达式默认执行完之后自动跳出,不会继续往后执行要返回的结果
    3. switch 表达式中不再需要显式地使用 return、break 或者 continue 来跳出当前分支
    4. 在 Java 14 表达式中,表达式默认执行完之后自动跳出,不会继续往后执行
    5. 相同的 case 方法块,可以将 case 条件并列
     public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            int day = scanner.nextInt();
            int number = switch (day) {
                case 1, 2, 3 -> 10;
                case 5 -> 5;
                default -> 0;
            };
            System.out.println(number);
        }
    

    删除CMS垃圾回收器

    1. Java14 正式移除了CMS垃圾回收器

    ZGC支持MacOS和Windows系统(实验阶段)

    1. Java14在之前的Linux/x64增加了MacOS和windows系统,解决了开发人员你需要在桌面操作系统中使用ZGC问题。在MacOS和Windows下面开启ZGC的方式需要使用vm参数

      -XX:+UnlockExperimentalVMOptions -XX:+UseZGC

    启用ParallelScavenge和SeialOld GC的组合使用

    1.年轻代当中使用并行算法、老年代使用串行算法,混搭使用,太过冒险。所以Java14考虑将这两GC的组合启用 采用如下参数 去弃用该组合参数

    -XX:+UseParallelGC -XX:-UseParallelOldGC
    

    文本块(第二预览版本)

    1. Java14 在13的基础上新增了 两个转义符 “\”和“\s"
      1. \行终止符
      2. \s 表示一个空格
    2. stripIndent() :用于从文本块中去除空白字符
    3. translateEscapes():用于翻译转义字符
    4. formatted(Object... args):用于格式化

    相关文章

      网友评论

        本文标题:Java14新特性

        本文链接:https://www.haomeiwen.com/subject/tmtcultx.html