• Java SE 15 新增特性


    Java SE 15 新增特性

    作者:Grey

    原文地址:

    博客园:Java SE 15 新增特性

    CSDN: Java SE 15 新增特性

    源码#

    源仓库: Github:java_new_features

    ZGC#

    Java SE 11 JEP 333将 ZGC 垃圾收集器作为一项实验性功能引入。

    这个 JEP 377 修复了一些错误,增加了一些功能和改进,现在支持 Linux/x86_64 、Linux/aarch64、Windows 和 macOS 等主要平台。
    这个JEP 377还将 ZGC 从一个实验性功能变为一个产品功能。然而,默认的垃圾收集器仍然是 G1。

    下面的命令启用了 ZGC 垃圾收集器

    java -XX:+UseZGC className
    

    文本块正式启用#

    多行字符串或文本块经历了

    Java 12 JEP 326 Raw String Literals

    Java 13 JEP 355: Text Blocks (Preview)

    Java 14 JEP 368: Text Blocks (Second Preview)

    是 Java SE 15 中的一个正式启用的功能,见JEP 378: Text Blocks

    示例代码如下

    package git.snippets.jdk15;
    
    /**
     * text block正式启用
     * @author Grey
     * @date 2021/11/29
     * @since 15
     */
    public class BlockTestInJava15 {
        public static void main(String[] args) {
            String content = """
                    {
                        "hello": 1,\
                        "world": 2,
                        "hello world": "1\s2",
                    }
                     """;
            System.out.println(content);
            String java15 = """
                    
                        
                            

    Hello, World

    """
    ; System.out.println(java15); } }

    运行结果

    
    {
        "hello": 1,    "world": 2,
        "hello world": "1 2",
    }
    
    <html>
        <body>
            <p>Hello, Worldp>
        body>
    html>
    

    Sealed Classes#

    目前,Java 没有提供对继承的细粒度控制。访问修饰符,如publicprotectedprivate,以及默认的package-private,提供了非常粗略的控制。

    Sealed Classes 的目标是允许单个类声明哪些类型可以作为子类型使用。这也适用于接口和确定哪些类型可以实现它们, 其中

    sealed -- 意味着它们必须使用 permits 关键字定义哪些类允许继承自它。

    non-sealed -- 允许任何类能够继承于它。

    密封类涉及两个新的关键字 -- sealed 和 permits,如下示例

    package git.snippets.jdk15;
    
    /**
     * @author Grey
     * @date 2022/8/21
     * @since 15
     */
    public abstract sealed class Person permits Employee, Manager {
    
        //...
    }
    final class Employee extends Person {
    }
    
    non-sealed class Manager extends Person {
    }
    

    我们已经声明了一个名为 Person 的抽象类。我们还规定,能够扩展它的类只有 Employee 和 Manager。

    任何继承密封类的类本身必须被声明为finalnon-sealed的或sealed的。这可以确保类的层次结构保持在有限的范围内被编译器识别。

    这种有限的、详尽的层次结构是使用密封类的一大好处。让我们看看这个例子的实际应用。如下代码

    if (person instanceof Employee) {
        return ((Employee) person).getEmployeeId();
    } 
    else if (person instanceof Manager) {
        return ((Manager) person).getSupervisorId();
    }
    

    如果没有一个密封的类,编译器就不能合理地确定所有可能的子类都被我们的 if-else 语句所覆盖。如果末尾没有 else 子句,编译器可能会发出警告,表明我们的逻辑没有涵盖所有的情况。

    Sealed Classes 在 Java SE 15 中是预览功能,到 Java SE 17 中正式启用。

    创建隐藏类#

    Java SE 15中引入的一个新特性被称为隐藏类。虽然大多数开发者不会发现它们的直接好处,但任何使用动态字节码或 JVM 语言的人都可能会发现它们很有用。

    隐藏类的目标是允许在运行时创建不能被发现的类。这意味着它们不能被其他类链接,也不能通过反射被发现。像这样的类通常有一个很短的生命周期,因此,隐藏类被设计成在加载和卸载时都很高效。

    请注意,当前版本的 Java 确实允许创建类似于隐藏类的匿名类。然而,它们依赖于不安全的API。隐藏类则没有这种依赖性。

    详见:JEP 371: Hidden Classes

    instanceof 类型匹配 (二次预览)#

    instanceof 类型匹配功能在 Java SE 14 中进行了预览,Java SE 15 旨在继续其预览状态,没有新的增强功能。

    该功能的目标是删除大量通常由 instanceof 操作符带来的模板代码。

    在 Java SE 14 之前

            // Before Java 14:
            if (obj instanceof H) {
                H jd1 = (H) obj;
                jd1.setId(1);
            }
    

    在 Java SE 14 中,可以简化为

            // Java 14+
            if (obj instanceof H jd2) {
                jd2.setId(1);
            }
    

    Records(二次预览)#

    Records 是存储纯数据的数据类。使用 Records 是为了快速创建简单而简洁的类(不含模板代码)。

    Records 最初在 Java SE 14 中作为早期预览版推出,Java SE 15 旨在继续其预览状态,在 Java SE 16 中正式发布。

    移除 Nashorn JavaScript 引擎#

    Nashorn JavaScript 引擎在 Java 8 中被引入,在 Java 11 中被标记为废弃。由于 ECMAScript 语言发展很快,维护 Nashorn JavaScript 的成本过于高昂,在 Java 15 中被彻底删除。

    详见:JEP 372: Remove the Nashorn JavaScript Engine

    更多#

    Java SE 7及以后各版本新增特性,持续更新中...

    参考资料#

    JDK 15 Release Notes

    Java 新特性教程

    What’s New in Java 15

    What is new in Java 15

  • 相关阅读:
    Sentinel 规则
    信息学奥赛算法入门之递归
    redis常用命令
    Automake创建工程流程
    凸包P2742
    高斯公式证明
    国产数据库四十年磨一剑,达梦数据科创板上市
    万丈高楼平地起,每个API皆根基
    《算法竞赛进阶指南》,USACO2008 通信线路
    k8s搭建 rabbitmq集群
  • 原文地址:https://www.cnblogs.com/greyzeng/p/16610328.html