Java 14 - 新特性和改进

位置:首页>文章>详情   分类: Java教程 > 编程技术   阅读(382)   2023-06-26 07:54:18

Java 14 于 2020 年 3 月 17 日全面上市。在本文中,我们将介绍 Java 中添加的 16 个新特性 编程语言列表中的一些功能。

We can find the JDK 14 二进制文件在这里.

1. JEP 305 – instanceof 的模式匹配(预览版)

在 Java 14 中,实例 运算符已被修改为具有类型测试模型。类型测试模式(在实例中使用)由一个指定类型的谓词和一个绑定变量组成。

在下面的代码中,短语 字串 是类型测试模式:

if (obj instanceof String s) {
    // can use s here
} else {
    // can't use s here
}

在上面的示例中,如果对象细节的实例,则实例运算符将目标对象“匹配”到类型测试模式,然后转换为细绳,赋值给绑定变量

Note that the pattern will only match, and will only be assigned, if 对象 is 不为空.

Read More : Java——instanceof 的模式匹配

2. JEP 368 – 文本块(第二次预览)

在 Java 中,一个文本块是一个多行字符字符串。这意味着我们不需要陷入混乱的显式行终止符、字符串连接和定界符中,否则将用于编写普通的字符串文字。

文本块由多行文本组成,并使用三个双引号字符 (""") 作为其开始和结束分隔符。

从文本块生成的实例是 java.lang.字串 类型,具有与传统双引号字符串相同的特征。这包括对象表示和实习到字符串池

此外,可以在任何可以使用字符串文字的地方使用文本块。例如,我们可以将它用于字符串连接。

String string = "Hello";
String textBlock = """
                    World""";
 
String joinedString =  string + textBlock;
 
System.out.println(joinedString);

Read More : Java – 文本块

3. JEP 358 – 有用的 NullPointerExceptions

Java 14 improves the usability of 空指针异常 generated by the JVM by describing precisely which variable was 无效的.

首先,我们需要传递 -XX:+ShowCodeDetailsInExceptionMessages JVM 标志以在运行应用程序时启用此功能。确保你通过了它。

public class HelpfulNullPointerException 
{
    public static void main(String[] args) 
    {
        Employee e = null;
         
        System.out.println(e.getName());
    }
}
Exception in thread "main" java.lang.NullPointerException: 
    Cannot invoke "com.cundage.core.basic.Employee.getName()" because "e" is null
    at com.cundage.core.basic.HelpfulNullPointerException.main 
    (HelpfulNullPointerException.java:9)

只有 JVM 直接创建和抛出的 NPE 才会包含 null-detail 消息(我们通常在程序中创建异常时在构造函数中传递的消息)。由在 JVM 上运行的程序显式创建和/或显式抛出的 NPE 不受字节码分析的约束。

Read More : Java 14 – 有用的 NullPointerException

4. JEP 359 – 记录(预览)

记录 类型已在 Java 14 中作为预览功能引入,并将用作普通不可变数据类,用于类和应用程序之间的数据传输。

枚举一样,record也是Java中的一种特殊类类型。它旨在用于创建类仅用作普通数据载体的地方。

类和记录之间的重要区别在于记录旨在消除设置和从实例获取数据所需的所有样板代码。记录将此责任转移给 java 编译器,后者生成构造函数、字段获取器、hashCode() 和 equals() 以及 toString() 方法。

public record EmployeeRecord(Long id, 
        String firstName, 
        String lastName, 
        String email, 
        int age) {
     
}

Read More : Java 14——记录类型

5. JEP 361 – 开关表达式(标准)

打开语句 允许应用程序根据运行时给定表达式的值有多个可能的执行路径。

在 Java 14 中,使用 切换表示达式,整个 switch 块“获得一个值”,然后可以在同一语句中将其分配给变量。

它支持多个 case 标签,并使用 屈服 返回值代替旧的 返回 关键字。

张举的情况下,我们可以跳过默认的情况。如果在案例中有任何缺失值没有处理,编译器会报错。在所有其他表达式类型(int、strings 等)中,我们也必须提供 默认 大小写。

public static Boolean isWeekDay (Day day) 
{
    Boolean result = switch(day) {
        case MON, TUE, WED, THUR, FRI ->
        { 
            System.out.println("It is WeekDay");
            yield true; 
        }
        case SAT, SUN ->
        { 
            System.out.println("It is Weekend");
            yield false; 
        }
    };
    return result;
}

Read More : Java 14——开关表达式

6.更多功能

6.1. JEP 343 – 打包工具(孵化器)

在 JDK 8 中,一个名为 java 包安装器 的工具作为 JavaFX 工具包的一部分发布。然而,在 JavaFX 随着 JDK 11 的发布从 Java 中分离出来之后,流行的 java 包安装器 不再可用。

这个 JEP 创建了一个简单的打包工具,基于支持原生打包格式的 java 打包器 工具,为最终用户提供自然的安装体验。这些格式包括 Windows 上的 msi 和 exe,macOS 上的 pkg 和 dmg,以及 Linux 上的 deb 和 rpm。

该工具可以直接从命令行调用,也可以通过工具提供者API以编程方式调用。

$ jpackage --name myapp --input lib --main-jar main.jar

6.2. JEP 345 – G1 的 NUMA 感知内存分配

在 Numa(非统一内存访问)内存架构中,每个处理器内核都接收少量本地内存,但其他内核被授予访问权限。

-XX:+使用并行 GC 启用的并行垃圾收集器多年来一直支持 NUMA,并提高了跨多个套接字运行单个 JVM 的配置的性能。

有了这个 JEP,G1 垃圾收集器得到了增强,可以在 Linux 操作系统下更好地管理内存。

6.3. JEP 349 – JFR 事件流

此 JEP 公开 JDK Flight Recorder 数据以进行持续监控,包括进程内和进程外的应用程序。

今天要使用数据,用户必须开始记录、停止记录、将内容转储到磁盘,然后解析记录文件。这适用于应用程序分析,通常一次至少记录一分钟的数据,但不适用于监控目的。

模块 jdk.jfr 中的包 jdk.jfr.消费者 扩展了异步订阅事件的功能。用户可以直接从磁盘存储库中读取或流式读取录音数据,而无需转储录音文件。

6.4. JEP 352 – 非易失性映射字节缓冲区

此 JEP 添加了新的 JDK 特定文件映射模式,以便 文件通信 API 可用于创建引用 NVM(非易失性记忆)。 NVM也称为持久内存,用于永久存储数据。

最近对 投影字节绑定冲区 API 的更改意味着它支持允许直接内存更新所需的所有行为,并提供更高级别所需的持久性保证,Java 客户端库实现持久数据类型(例如块文件系统、日志日志、持久对象等)。

6.5. JEP 363 – 删除并发标记清除 (CMS) 垃圾收集器

这个 JEP 旨在删除在 Java 9 (JEP 291) 中被标记为已弃用的 CMS 垃圾收集器。感兴趣的用户有两年的时间来照顾和维护这个项目,但它并没有发生。

所以现在,CMS GC 已从 Java 14 中删除。请注意,CMS 垃圾收集器尚未从以前的版本中删除,并将在 Java 13 之前可用。

6.6. JEP 367 – 删除 Pack200 工具和 API

删除pack200 和unpack200 工具,以及java.util.jar 包中的包200 API(Java SE 5.0 引入的JAR 文件压缩方案)。这些工具和 API 在 Java SE 11 中被弃用并被删除,明确表示要在未来的版本中删除它们。

6.7. JEP 370 – 外部内存访问 API(孵化器)

通过这个 JEP,Java 提供了一个 API 来允许 Java 程序安全高效地访问 Java 堆之外的外部内存。

目标是相同的 API 应该能够操作各种外部内存(例如,本机内存、持久内存、托管堆内存等)。

API 不应该破坏 JVM 的安全性,无论操作的内存类型如何。此外,内存释放操作在源代码中应该是明确的。

请在与 Java 14 新特性 相关的评论中向我提出您的问题。

快乐学习!!

参考:Java 14 发布

标签2: Java 14 Java Features
地址:https://www.cundage.com/article/java14-new-features.html

相关阅读

Java 14 于 2020 年 3 月 17 日全面上市。在本文中,我们将介绍 Java 中添加的 16 个新特性 编程语言列表中的一些功能。 We can find the JDK 14 二...
在此页面上,我们将经常按顺序列出最新 Java 版本中的主要功能更改。尽管我们已尝试涵盖尽可能多的信息,但如果您知道我们在下面遗漏了什么,请告诉我,我们会添加该信息。 Java 18 特性 Ja...
Java 15 在第 6 个月的发布周期之后于 2020 年 9 月 15 日发布。 Java 15 继续支持以前 JDK 版本中的各种预览功能;并且还引入了一些新特性。 让我们了解一下 Jav...
通过示例了解 Java 14 中添加的 yield 关键字 以支持 switch 表达式。 1.yield关键字 yield是在Java 14中加入的,在switch表达式中使用。 Boolea...
这篇文章延续了我在我的My Top Java 9 Features 博文中对 Java9 特性的探索。这里我们在 List、Set 和 Map 接口中试验 Java9 集合静态工厂方法。
了解 Java 中的记录类型。它在 Java 14 中作为预览功能引入,并在稍后完成。 Java 记录应该用作不可变的 POJO,以在类和应用程序之间传输数据。 1. 什么是记录? 和张举一样,...
Scala 3, the latest version of the object-oriented, 具有 JVM 和 JavaScript 运行时的函数式语言, is now availab...
Java 9 发布后,Java 10 很快就来了。与之前的版本不同,Java 10 没有那么多令人兴奋的功能,但它仍然没有什么重要的更新会改变你的编码方式,以及其他未来的 Java 版本。 JE...
这篇文章延续了我在我的My Top Java 9 Features 博文中对 Java9 特性的探索。在这里,我们在 JShell 中试验 Java9 HTTP/2 Client 和 Proce...
Eclipse GlassFish 7.0 是一个 Java 应用程序服务器,它为企业级 Java 部署实施 Jakarta EE 10 框架,现已普遍可用。 GlassFish 7.0 于 1...