JDK 18 正式发布
JDK 17 刚发布半年,JDK 18 又如期而至,JDK 版本号这算是成年了?
JDK 18 发布了,栈长继续为大家解读!
JDK 18 延续了 JDK 17 开创的免费策略,但,JDK 18~20 不是长期支持版本,注意不要用在生产。
最新 Oracle Java 支持路线图:
JDK 18 新特性一览
JDK 18 这个版本提供了 9 个增强功能,栈长接下来为大家一一解读。
关注公众号Java技术栈,持续分享最新、最主流的Java技术~
JDK 18 新特性详细介绍
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 的维护和开发成本。
另外,最新最全的 Java 面试题整理好了,大家可以在Java面试库小程序在线刷题。
5、417:Vector API (Third Incubator)
矢量 API(三次孵化中)
Vector API 这是一个新的初始迭代孵化器模块,模块包:jdk.incubator.vector,用于表示在运行时可靠地编译到支持的 CPU 架构上的最佳矢量硬件指令的矢量计算,矢量运算可以提供优于等效标量计算的性能,并且在机器学习、人工智能和密码学等领域非常普遍。
本次增强的 API 允许以一种在运行时,可靠地编译为支持的 CPU 架构上的最佳向量指令的方式表达向量计算。
下个版本会转正吗?