美文网首页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