JDK成年了,JDK18版本发布,走进JDK18新特性

目录

最新 Oracle Java 支持路线图

JDK 18 新特性一览 

JDK18新特性详细介绍 

1、400:UTF-8 by Default 

2、408:Simple Web Server 

3、413:Code Snippets in Java API Documentation

4、416:Reimplement Core Reflection with Method Handles

5、417:Vector API (Third Incubator) 

6、418:Internet-Address Resolution SPI 

7、JEP 419: Foreign Function & Memory API (Second Incubator) 

8、JEP 420: Pattern Matching for switch (Second Preview) 

9、JEP 421: Deprecate Finalization for Removal 


JDK 17 刚发布半年,JDK 18 又如期而至,JDK 版本号这算是成年了。

Java Development Kit (JDK) 18 将于 2022 年 3 月 22 日发布。新版本的标准 Java 将有九个新特性,特性集已于 12 月 9 日冻结。在上个月开始的初始减速阶段(Rampdown)之后,该版本已于 1 月 20 日进入第二个减速阶段。

JDK 18 延续了 JDK 17 开创的免费策略,但,JDK 18~20 不是长期支持版本,注意不要用在生产。

最新 Oracle Java 支持路线图

JDK 18 新特性一览 

 

JDK 18 这个版本提供了 9 个增强功能,让我们来逐个解读一下。

JDK18新特性详细介绍 

1、400:UTF-8 by Default 

默认 UTF-8 

没错,将 UTF-8 指定为标准 Java API 的默认字符集。 

在 JDK 17 及更早版本中,默认字符集是在 Java 虚拟机运行时才确定的,取决于不同的操作系统、区域设置等因素,因此存在潜在的风险。 

从这个版本开始,依赖于默认字符集的 API 会在所有实现、操作系统、语言环境和配置中保持一致。

可以使用以下命令查看当前 JDK 的默认字符集: 

java -XshowSettings:properties -version 2>&1 | grep file.encoding
    file.encoding = UTF-8
    file.encoding.pkg = sun.io

 在 JDK 中通过下面 API 获取当前 JDK 的默认字符集:

Charset.defaultCharset()

 我们都知道字符集一致的重要性,所有地方默认字符集保持一致真的非常有用。

2、408:Simple Web Server 

简单 Web 服务器 

提供一个命令行工具启动的迷你 Web 服务器: 

$ jwebserver
Binding to loopback by default. For all interfaces use "-b 0.0.0.0" or "-b ::".
Serving /cwd and subdirectories on 127.0.0.1 port 8000
URL: http://127.0.0.1:8000/

只限于静态文件,类似于 Apache、Nginx 的静态服务器功能,不过它要更简单,功能极少,设置简单。

简单的、临时的测试用用我觉得还行,不用去额外下载和配置其他的服务器组件,以后用 Java 就能搞定了,有兴趣的可以研究试用下!

3、413:Code Snippets in Java API Documentation

Java API 文档中支持 Snippets 代码片段 

增加了 @snippet 标签,简化 API 文档中包含示例源代码的情况。 

使用语法: 

{@snippet ...}

 以前是这样写的:

/**
 * <pre>{@code
 *     String[] y = x.toArray(new String[0]);
 * }</pre>
 *
 */

 JDK 18 中可以这样:

/**
 * The following code shows how to use {@code Optional.isPresent}:
 * {@snippet :
 * if (v.isPresent()) {
 *     System.out.println("v: " + v.get());
 * }
 * }
 */

4、416:Reimplement Core Reflection with Method Handles

重新实现反射核心机制(Method Handles) 

JDK 18 使 Method Handles 作为反射的底层机制,重新实现了 java.lang.reflect.Method、Constructor、Field 组件,将大大降低反射 API 的维护和开发成本。 

5、417:Vector API (Third Incubator) 

矢量 API(三次孵化中) 

Vector API 这是一个新的初始迭代孵化器模块,模块包:jdk.incubator.vector,用于表示在运行时可靠地编译到支持的 CPU 架构上的最佳矢量硬件指令的矢量计算,矢量运算可以提供优于等效标量计算的性能,并且在机器学习、人工智能和密码学等领域非常普遍。 

本次增强的 API 允许以一种在运行时,可靠地编译为支持的 CPU 架构上的最佳向量指令的方式表达向量计算。 

6、418:Internet-Address Resolution SPI 

互联网地址解析 SPI 

定义了一个全新的 SPI(service-provider interface),用于主要名称和地址的解析,以便 java.net.InetAddress 可以使用平台之外的第三方解析器。 

7、JEP 419: Foreign Function & Memory API (Second Incubator) 

外部函数和内存 API(二次孵化中) 

改进了 JDK 14 和 JDK 15 引入的 API,通过有效调用外部函数(即 JVM 之外的代码),以及安全地访问外部内存(JVM 之外的内存),这些 API 可以调用本地库和处理本地数据,与 Java 运行环境之外的代码和数据进行交互。 

8、JEP 420: Pattern Matching for switch (Second Preview) 

switch 模式匹配(二次预览中) 

这次在 JDK 17 中为 switch 语句支持模式匹配,是个什么鬼?来看下面的示例! 

老代码写法: 

static String formatter(Object o) {
    String formatted = "unknown";
    if (o instanceof Integer i) {
        formatted = String.format("int %d", i);
    } else if (o instanceof Long l) {
        formatted = String.format("long %d", l);
    } else if (o instanceof Double d) {
        formatted = String.format("double %f", d);
    } else if (o instanceof String s) {
        formatted = String.format("String %s", s);
    }
    return formatted;
}

模式匹配新写法:

static String formatterPatternSwitch(Object o) {
    return switch (o) {
        case Integer i -> String.format("int %d", i);
        case Long l    -> String.format("long %d", l);
        case Double d  -> String.format("double %f", d);
        case String s  -> String.format("String %s", s);
        default        -> o.toString();
    };
}

直接在 switch 上支持 Object 类型,这就等于同时支持多种类型,使用模式匹配得到具体类型,大大简化了语法量,这个功能还是挺实用的,期待转正,栈长会再详细写一篇,关注公众号:Java技术栈,公众号第一时间推送哦。

9、JEP 421: Deprecate Finalization for Removal 

弃用 Finalization 

如现在使用 finalize 方法: 

 已经标识为废弃状态了。

finalize 大家应该都很清楚吧!

它可以帮助我们主动释放系统底层资源,说实话,没用过,Java 是自动管理内存的,使用它反而会导致潜在的系统安全风险,没帮助不说反而是负担,所以计划移除了。

Finalization 现在默认是开启的,但可以通过下面参数进行禁用:

--finalization=disable

JDK-18_windows-x64_bin 是指适用于 Windows 64位操作系统的 JDK 18安装包。 JDKJava Development Kit)是用于开发、编译和调试 Java 程序的软件开发工具包。JDK 包含了 Java 运行环境(Java Runtime Environment,JRE)、编译器(javac)以及其他用于开发的工具和库。它是开发 Java 应用程序的必备工具之一。 18 表示 JDK 版本。每个 JDK 版本都会包含一些新的特性和改进,以提供更好的开发体验和性能。对于使用 JDK 来说,选择合适的版本非常重要,因为它决定了程序的兼容性和所使用的特性。 windows-x64_bin 表示该 JDK 版本是为 Windows 64位操作系统而设计的二进制(二进制文件即计算机能直接执行的指令代码)安装包。64位操作系统意味着处理器支持64位的计算,并且能够更有效地处理大量内存和资源。因此,使用适用于该操作系统的 JDK 版本,能够更好地发挥计算机性能。 JDK-18_windows-x64_bin 安装包可以通过官方网站或其他可信渠道下载和安装。安装过程中会提供一些配置选项,如安装路径和环境变量等。安装完成后,可以使用命令行运行 java 命令,或者使用诸如 Eclipse、IntelliJ IDEA等集成开发环境来开发和调试 Java 程序。 总之,JDK-18_windows-x64_bin 是指适用于 Windows 64位操作系统的 JDK 18安装包,它提供了Java开发所需的编译器和工具,使我们能够更方便地开发和运行 Java 程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦想天涯~路在脚下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值