zoukankan      html  css  js  c++  java
  • Java15新特性

    密封的类和接口

    通过密封的类和接口来增强 Java 编程语言,这是新的预览特性,目的是用于限制超类的使用,密封的类和接口限制其它可能继承或实现它们的其它类或接口。
    这个特性的目标包括——允许类或接口的开发者来控制哪些代码负责实现,提供了比限制使用超类的访问修饰符声明方式更多选择,并通过支持对模式的详尽分析而支持模式匹配的未来发展。
    在Java中,类层次结构通过继承实现代码的重用,父类的方法可以被许多子类继承。但是,类层次结构的目的并不总是重用代码。有时,其目的是对域中存在的各种可能性进行建模,例如图形库支持的形状类型或金融应用程序支持的贷款类型。当以这种方式使用类层次结构时,我们可能需要限制子类集从而来简化建模。

    /**
     * 因为我们引入了sealed class或interfaces,这些class或者interfaces只允许被指定的类或者interface进行扩展和实现
     * 使用修饰符sealed,可以将一个类声明为密封类。密封的类使用reserved关键字permits列出可以直接扩展它的类。子类可以是最终的,非密封的或密封的
     */
    public abstract sealed class Shape permits Circle, Rectangle, Square {...}​
    
    public final class Circle extends Shape {...}
    
    ​public sealed class Rectangle extends Shape permits TransparentRectangle, FilledRectangle {...}
    
    public final class TransparentRectangle extends Rectangle {...}
    
    public final class FilledRectangle extends Rectangle {...}​
    
    public non-sealed class Square extends Shape {...}
    

    隐藏类

    该提案通过启用标准 API 来定义无法发现且具有有限生命周期的隐藏类,从而提高 JVM 上所有语言的效率。JDK内部和外部的框架将能够动态生成类,而这些类可以定义隐藏类。通常来说基于JVM的很多语言都有动态生成类的机制,这样可以提高语言的灵活性和效率。
    隐藏类天生为框架设计的,在运行时生成内部的class。
    隐藏类只能通过反射访问,不能直接被其他类的字节码访问。
    隐藏类可以独立于其他类加载、卸载,这可以减少框架的内存占用。

    instanceof模式匹配

    在14中作为预览语言功能引入的instanceof模式匹配,在Java 15中处于第二次预览,而没有任何更改

    ZGC 功能转正

    ZGC是Java 11引入的新的垃圾收集器(JDK9以后默认的垃圾回收器是G1),经过了多个实验阶段,自此终于成为正式特性。
    自 2018 年以来,ZGC 已增加了许多改进,从并发类卸载、取消使用未使用的内存、对类数据共享的支持到改进的 NUMA 感知。此外,最大堆大小从 4 TB 增加到 16 TB。支持的平台包括 Linux、Windows 和 MacOS。
    ZGC是一个重新设计的并发的垃圾回收器,通过减少 GC 停顿时间来提高性能。
    但是这并不是替换默认的GC,默认的GC仍然还是G1;之前需要通过-XX:+UnlockExperimentalVMOptions -XX:+UseZGC来启用ZGC,现在只需要-XX:+UseZGC就可以。相信不久的将来它必将成为默认的垃圾回收器

    文本块功能转正

    Text Blocks首次是在JDK 13中以预览功能出现的,然后在JDK 14中又预览了一次,终于在JDK 15中被确定下来,可放心使用了。
    文本块是一种多行字符串文字,它避免了大多数转义序列的需要,以一种可预测的方式自动设置字符串的格式,并在需要时使开发人员可以控制格式,简化编写 Java 程序的任务。
    文本块建议的目标是提高 Java 程序中的字符串的可读性,这些字符串表示以非 Java 语言编写的代码。另一个目标是支持从字符串文本迁移,规定任何新构造都可以表达与字符串文本相同的字符串集,解释相同的转义序列,并且以与字符串文本相同的方式进行操作。OpenJDK 开发人员希望添加转义序列来管理显式空白和换行控件。

    Records Class(预览)

    Records Class 也是第二次出现的预览功能,它在 JDK 14 中也出现过一次了,使用 Record 可以更方便的创建一个常量类,使用的前后代码对比如下。
    当你用Record 声明一个类时,该类将自动拥有以下功能:

    • 获取成员变量的简单方法。
    • 一个 equals 方法的实现,执行比较时会比较该类的所有成员属性
    • 重写 equals 当然要重写 hashCode
    • 一个可以打印该类所有成员属性的 toString 方法。
    • 请注意只会有一个构造方法。
  • 相关阅读:
    python django 创建app失败 升级sqlite3 或者修改数据库连接为mysql
    Decima json 化
    openpyxl excel操作
    centos添加python虚拟环境
    oracle的参数文件:pfile和spfile
    修改 db_unique_name
    工具 --- Vim
    部署 --- Nginx
    工具 --- Git使用
    django 之(五) --- RESTApi总结
  • 原文地址:https://www.cnblogs.com/ding-dang/p/14684252.html
Copyright © 2011-2022 走看看