Java 9 特性2025年3月17日 | 阅读 12 分钟 Oracle 发布了 Java 9,其中包含丰富的新功能。它包括对 Java 编程、JVM、工具和库的各种升级。在本教程中,我们将讨论下面列出的所有主要功能。
Java 平台模块系统 (Project Jigsaw)它是一种新型的 Java 编程组件,可用于收集 Java 代码(类和包)。该项目的主要目标是轻松将应用程序缩小到小型设备。在 Java 9 中,JDK 本身已分为一组模块,使其更轻量。它还允许我们开发模块化应用程序。 有关更多信息,请点击此处 接口私有方法在 Java 9 中,我们可以在接口内部创建私有方法。接口允许我们声明私有方法,这有助于在非抽象方法之间共享通用代码。 在 Java 9 之前,在接口内部创建私有方法会导致编译时错误。有关更多信息,请点击此处 Try-With Resources(尝试资源)Java 在 Java 7 中引入了 try-with-resource 功能,有助于在使用后自动关闭资源。 换句话说,我们可以说我们不需要显式关闭资源(文件、连接、网络等),try-with-resource 会通过使用 AutoClosable 接口自动关闭它们。 在 Java 7 中,try-with-resources 有一个限制,要求在其块内局部声明资源。 有关更多信息,请点击此处 匿名类改进Java 9 引入了一个新功能,允许我们将菱形运算符与匿名类一起使用。在 Java 7 中不允许将菱形运算符与匿名类一起使用。 在 Java 9 中,只要推断类型是可表示的,我们就可以在创建匿名内部类时使用菱形运算符。 有关更多信息,请点击此处 Java @SafeVarargs 注解它是一个注解,应用于接受可变参数的方法或构造函数。它用于确保该方法不会对其可变参数执行不安全操作。 它包含在 Java 7 中,只能应用于
有关更多信息,请点击此处 Java 集合工厂方法工厂方法是一种特殊类型的静态方法,用于创建不可修改的集合实例。这意味着我们可以使用这些方法创建少量元素的列表、集合和映射。 它是不可修改的,因此添加新元素将抛出 java.lang.UnsupportedOperationException 有关更多信息,请点击此处 Java 进程 API 改进Java 在 Java 9 版本中改进了其进程 API,有助于管理和控制操作系统进程。 在早期版本中,使用 Java 编程管理和控制操作系统进程很复杂。现在,添加了新类和接口来执行此任务。 有关更多信息,请点击此处 Java 新版本字符串方案Java 版本字符串是一种包含版本特定信息的格式。此版本字符串由主要、次要、安全和补丁更新版本组成。 在 Java 9 中,引入了一种新的版本字符串方案。有关更多信息,请点击此处。 JShell:Java Shell (REPL)它是一个交互式 Java Shell 工具,允许我们从 shell 执行 Java 代码并立即显示输出。JShell 是一个 REPL(Read Evaluate Print Loop)工具,并从命令行运行。如果我们想测试业务逻辑并立即获得结果,它会很有用。有关更多信息,请点击此处 Java 9 控制面板Java 控制面板用于控制嵌入在浏览器中的 Java 应用程序。此控制面板维护管理嵌入在浏览器中的 Java 应用程序的设置。 在 Java 9 中,控制面板被重写为 JavaFX 应用程序,并且存储位置已更改。有关更多信息,请点击此处。 Java 9 Stream API 改进在 Java 9 中,Stream API 得到了改进,并向 Stream 接口添加了新方法。TakeWhile、dropWhile 和 ofNullable 以及一个重载的 iterate 方法被添加,用于对流元素执行操作。有关更多信息,请点击此处。 Microsoft Windows 的安装程序增强功能Java 9 包含改进的 Microsoft Windows 安装程序版本,并添加了以下功能。 此安装程序允许我们启用和禁用 Web 部署。我们可以通过选择“自定义设置”,安装并点击安装程序欢迎页面上的复选框来启用 Web 部署。 macOS 的安装程序增强功能Java 9 将以下功能包含在 macOS 安装程序中。
添加更多诊断命令Java 9 添加了一些新命令以改进诊断问题。这些诊断命令用于诊断 Hotspot 和 JDK。 Java jcmd 实用程序可用于向正在运行的 Java 虚拟机 (JVM) 发送诊断命令请求。 删除启动时 JRE 版本选择Java 9 已删除启动时的 JRE (Java Runtime Environment) 版本选择。如今,现代应用程序都有自己的活动安装程序,其中进一步包含管理 JRE 的方法。这就是 JRE 版本选择被删除的原因。 删除 JVM TI hprof 代理Java 9 已从现有的 JDK 中删除了 hprof。它并非旨在作为生产工具。hprof 代理的一些更好功能已被更好的替代方案取代。 删除 Jhat 工具Java 在其新版本 JDK 9 中删除了 jhat 工具。它是一个实验性且不受支持的工具,在 JDK 6 中添加,现在已过时。 验证 JVM 命令行标志参数Java 验证所有数字 JVM 命令行标志的参数,以避免失败。如果参数无效或超出范围,它会显示相应的错误消息。 已实现对需要数值的范围和可选的约束检查。 jlink:Java 连接器jlink 是一个工具,可用于将一组模块组装成运行时映像。它还允许我们将模块的依赖项组装到自定义运行时映像中。 链接时间是编译和运行时之间的一个阶段,jlink 在那里进行链接并将模块组装到运行时映像中。 数据报传输层安全 (DTLS)DTLS 是一种用于在数据报上构建 TLS 的协议。JSSE (Java Secure Socket Extension) API 支持 DTLS 协议的 1.0 和 1.2 版本。 TLS 协议需要 TCP,因此不能用于保护不可靠的数据报流量。 TLS 应用层协议协商扩展此扩展允许 TLS 连接中的客户端和服务器协商应用程序协议。客户端服务器相互通信并告知对方支持的应用程序协议。应用程序协议协商在 TLS 握手内完成。 TLS 的 OCSP StaplingOCSP (Online Certificate Status Protocol) 帮助 TLS 连接中的服务器检查已吊销的 X.509 证书吊销。在 TLS 握手期间,服务器联系 OCSP 响应器以获取证书。然后,服务器将吊销信息 stapling 到客户端的证书。 基于 DRBG 的 SecureRandom 实现Java 9 在 SecureRandom API 中包含了 NIST SP 800-90Ar1 中指定的 DRBG (Deterministic Random Bit Generator) 机制的功能。 DRBG 机制使用现代算法,如 SHA-512 和 AES-256。每个机制都可以配置不同的安全强度和功能以满足用户要求。 禁用 SHA-1 证书JDK 的安全配置已得到改进。它提供更灵活的机制来禁用具有基于 SHA-1 签名的 X.509 证书。 jdk.certpath.disabledAlgorithms 安全属性得到了增强,增加了几个新的约束,允许对可禁用证书的类型进行更大的控制。 默认创建 PKCS12 密钥库默认密钥库类型已从 JKS 修改为 PKCS12。PKCS 是一种可扩展、标准且广泛支持的用于存储加密密钥的格式。它通过存储私钥、受信任的公钥证书等来提高机密性。此功能还为与其他支持 PKCS12 的系统(如 Mozilla、Microsoft 的 Internet Explorer 和 OpenSSL)的互操作性提供了机会。 SHA-3 哈希算法新 Java 版本支持 SHA-3 加密哈希函数。 java.security.MessageDigest API 支持各种算法,如:SHA3-224、SHA3-256、SHA3-384 和 SHA3-512。 以下提供程序支持 SHA-3 算法增强
废弃 Java 插件Java 插件和 applet 技术已在 JDK 9 中废弃。在未来的版本中,这些技术将被移除。 Java 插件是运行 Web 浏览器中的 applet 和 JavaFX 应用程序所必需的。建议将应用程序重写为 Java Web 应用程序。 增强的 Java 控制面板Java 控制面板已得到改进,信息更容易找到,提供了搜索字段,并且不再使用模式对话框。请注意,某些选项的位置已从 Java 控制面板的先前版本中更改。 模块化 Java 应用程序打包Java 新版本将 Project Jigsaw 的功能集成到 Java Packager 中,包括模块感知和自定义运行时创建。 我们可以使用 jlink 工具创建更小的包。 简化的 Doclet API旧的 Doclet API 被一个新的简化 API 所取代,该 API 利用了其他标准的现有 API。在 Java 9 中,标准 doclet 已被重写以使用新的 Doclet API。 编译器控制现在,我们可以通过编译器指令选项控制 JVM 编译。控制级别是运行时可管理的且方法特定的。编译器控制取代了 CompileCommand,并且向后兼容。 分段代码缓存代码缓存分为不同的段。每个段都是编译的代码,并提高性能和实现可扩展性。 统一 JVM 日志记录Java 新版本为 JVM 的所有组件引入了一个通用的日志记录系统。 删除 JDK 8 中已废弃的 GC 组合已废弃的垃圾收集器组合已从 JDK 9 中删除。以下是新版本中不支持的垃圾收集器组合。
统一 GC 日志记录垃圾收集日志记录通过使用统一的 JVM 日志记录框架重新实现。 废弃并发标记清除 (CMS) 垃圾收集器并发标记清除 (CMS) 垃圾收集器已废弃。在命令行请求时会发出警告消息。Garbage-First (G1) 垃圾收集器旨在替代 CMS 的大多数用途。 进程 API 更新进程 API 已通过方法和接口得到改进。此 API 处理操作系统进程。 ProcessHandle 类用于获取进程的本地进程 ID、参数、命令、启动时间、累计 CPU 时间、用户、父进程和后代。 紧凑字符串在新版本中,Java 对字符串使用更节省空间的内部表示。在以前的版本中,字符串存储在 char 数组中,每个字符占用两个字节。现在,字符串的新内部表示是一个字节类。 平台日志记录 API 和服务java.util.logging API 帮助记录消息,以及为消费者提供服务接口。应用程序或库可以提供此服务的实现,将消息记录到日志记录框架。如果没有提供实现,它将使用默认实现。 更多并发更新JDK 9 中添加了更多并发更新。这些更新改进了 CompletableFuture API 和可互操作的发布-订阅框架。 XML 目录添加了标准 XML 目录 API,支持 OASIS (结构化信息标准) XML 目录 1.1 版的组织。此 API 包含目录解析器,可用作 JAXP 处理器中的固有功能。 集合的便捷工厂方法此功能使创建少量元素的集合和映射实例变得更容易。List、Set 和 Map 中添加了一些新方法来创建不可变实例。例如 Set<String> alphabet = Set.of(1, 2, 3); 增强的废弃@Deprecated 注解得到了改进,提供了关于 API 状态和预期处置的更好信息。添加了以下新元素。
自旋等待提示它使 Java 代码能够通知正在执行自旋循环。自旋循环重复检查条件是否为真,例如何时可以获取锁,然后可以安全地执行一些计算,然后释放锁。此 API 纯粹是一个提示,不带有语义行为要求。 过滤传入的序列化数据它有助于过滤传入对象序列化数据流的数据,以提高健壮性和安全性。对象序列化客户端可以更容易地验证其输入,导出的远程方法调用 (RMI) 对象也可以更容易地验证调用参数。 序列化客户端实现一个设置在 ObjectInputStream 上的过滤器接口。对于 RMI,对象通过 RemoteServerRef 导出,RemoteServerRef 在 MarshalInputStream 上设置过滤器,以便在解组调用参数时对其进行验证。 栈遍历 APIJava 包含一个栈遍历 API,允许懒惰地访问栈中的信息。它还允许轻松过滤信息。 如果栈遍历器配置正确,此栈遍历 API 允许访问 Class 对象。 Nashorn 的解析器 APIJava 添加了 Parser API,允许我们在服务器端框架、特定 IDE 等中启用应用程序。 它可以使用 Parser 类的方法从字符串、URL 或文件中解析 ECMAScript 代码。此类的方法返回 CompilationUnitTree 类的对象,该对象将 ECMAScript 代码表示为抽象语法树。 Nashorn 解析器 API 位于 jdk.nashorn.api.tree 包中。 在 Nashorn 中实现选定的 ECMAScript 6 功能Java 在 ECMA-62 的第 6 版中为 Nashorn 添加了一些新功能。以下是已实现的功能。
为模块化准备 JavaFX UI 控件和 CSS APIJava 包含了 CSS 功能和 JavaFX UI 控件的公共 API。这些功能以前只能通过内部包使用,但现在由于模块化方法而变得可访问。 包含了一个新包 javafx.scene.control.skin,它由一组类组成,用于提供每个 UI(用户界面)控件的默认实现。 BeanInfo 注解@beaninfo Javadoc 标签已被注解类型 JavaBean、BeanProperty 和 SwingContainer 取代。 我们可以直接在 Bean 类中使用这些属性。它还允许自动删除自动创建的类,并在运行时 BeanInfo 生成期间设置相应的特征属性。 TIFF 图像 I/OTIFF(标签图像文件格式)已作为标准添加,用于读写。它位于 javax.imageio 包中。另外添加了一个新包 javax.imageio.plugins.tiff,用于提供简化 TIFF 元数据可选操作的类。 Windows 和 Linux 上的 HiDPI 图形自动缩放和调整 Windows 和 Linux 上高 DPI (HiDPI) 显示器的 AWT 和 Swing 组件的大小。 JDK 已经支持 OS X 上的 HiDPI“视网膜显示器”。 在此版本之前,在 Windows 和 Linux 上,Java 应用程序是根据像素进行大小调整和渲染的,即使在像素密度是传统显示器两到三倍的 HiDPI 显示器上也是如此。这导致 GUI 组件和窗口太小而无法读取或使用。 平台特定桌面功能java.awt.Desktop 类中添加了一些新方法。这些方法提供以下功能。
在 Linux 上启用 GTK 3Java 新版本允许 Java 图形应用程序(JavaFX、Swing 或 Abstract Window Toolkit)在 Linux 上使用 GTK 版本。 JDK 默认使用 GTK +2,如果不可用,则使用 GTK+3。 我们可以通过设置 jdk.gtk.version 属性来使用特定版本。 Unicode 8.0Java 在其新 Java 9 版本中支持 Unicode 8.0,以前使用的是 Unicode 6.2。 Java 9 支持 Unicode 6.3、7.0 和 8.0 标准,这些标准总共引入了 10,555 个字符、29 种脚本和 42 个块。 默认启用 CLDR 区域设置数据CLDR (Common Locale Data Repository's) 表示 Unicode CLDR 项目提供的区域设置数据。它首先在 JDK 8 中添加,现在在 JDK 9 中是默认的。 我们可以通过将属性 java.locale.providers 设置为 COMPAT 在 CLDR 之前的值来启用与 Java 8 兼容的行为。 UTF-8 属性文件UTF-8 是一种表示非拉丁字符的便捷方式。新版本的 java 以 UTF-8 编码加载属性文件。在早期版本中,加载属性资源包时使用 ISO-8859-1 编码。
下一主题接口私有方法 |
我们请求您订阅我们的新闻通讯以获取最新更新。