Java9 新功能

Java9 新功能

Oracle发布了Java 9,其中包含许多新功能。它包括对Java编程,JVM,工具和库的各种升级。在本教程中,我们将讨论下面给出的所有主要功能。
平台模块系统(Jigsaw项目)、
接口私有方法、
Java9 try增强功能、
Java9 匿名内部类改进、
@SafeVarargs注释、
集合工厂方法、
流程API改进、
新版本字符串方案、
JShell: Java Shell(REPL)、
模块系统、
控制面板、
Stream API改进、
Java 9下划线等等

Java平台模块系统(Jigsaw项目)

这是一种新型的Java编程组件,可用于收集Java代码(类和包)。该项目的主要目标是轻松地将应用程序缩小到小型设备。在Java 9中,JDK本身划分为一组模块以使其更轻量。它还允许我们开发模块化应用程序。
有关更多信息,请点击单击此处

接口私有方法

在Java 9中,我们可以在接口内部创建私有方法。接口允许我们声明私有方法,以帮助在
非抽象方法之间
共享通用代码。

在Java 9之前,在接口内创建私有方法导致编译时错误。有关更多信息,
请单击此处

尝试使用资源

引入了Java Java 7中的
try-with-resource 功能,可在使用后自动关闭资源。

换句话说,我们可以说不需要关闭资源(文件,连接,网络等),try-with-resource通过使用AutoClosable接口自动关闭。

在Java 7中,try-with-resources有一个局限性,要求资源在其块内本地声明。

有关更多信息,
请单击此处

匿名类改进

Java 9引入了一项新功能,该功能使我们可以将Diamond运算符与匿名类一起使用。在Java 7中,不允许将Diamond与匿名类一起使用。

在Java 9中,只要推断类型是可表示的,我们就可以在创建匿名内部类时使用Diamond运算符。
有关更多信息,
请单击此处

Java @SafeVarargs注释

它是一个注释,适用于采用
varargs参数的方法或构造函数。它用于确保该方法不会对其varargs参数执行不安全的操作。

它已包含在Java 7中,并且只能应用于

Final方法
Static方法
构造函数

有关更多信息,
请单击此处

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(读取评估打印循环)工具,可从命令行运行。如果我们想测试我们的业务逻辑并立即获得结果,那是有益的。有关更多信息,请单击此处

Java 9控制面板

Java控制面板用于控制嵌入在浏览器中的Java应用程序。该控制面板保留用于管理浏览器中嵌入的Java应用程序的设置。

在Java 9中,控制面板被重写为JavaFX应用程序,并且存储位置已更改。有关更多信息,
请单击此处。

Java 9 Stream API改进

在Java 9中,Stream API进行了改进,并将新方法添加到Stream接口。添加了TakeWhile,dropWhile和ofNullable以及一个重载的迭代方法,以对流元素执行操作。有关更多信息,
请单击此处。

安装程序增强对于Microsoft Windows

Java 9包括Microsoft Windows安装程序的改进版本并添加了以下功能。

此安装程序使我们可以启用和禁用Web部署。我们可以通过选择"自定义设置"来启用Web部署,安装并单击安装程序的欢迎页面中的复选框。

macOS的安装程序增强功能

包括Java 9 macOS安装程序具有以下功能。
功能 说明
CPU版本可用性 它在卸载当前CPU版本后提供有关下一个CPU可用性的通知。
用户体验 它在更新JRE时增强了用户体验。

添加更多诊断命令

Java 9添加了一些新命令来改善诊断问题。这些诊断命令用于诊断Hotspot和JDK。

Java jcmd实用程序可用于将诊断命令请求发送到正在运行的Java虚拟机(JVM)。

删除启动时JRE版本选择

Java 9已在启动时删除了JRE(Java运行时环境)版本选择。如今,现代应用程序具有自己的活动安装程序,该安装程序进一步包含管理JRE的方法。这就是为什么删除JRE版本的原因。

删除JVM TI hprof代理

Java 9已从现有的JDK中删除了hprof。它不打算成为生产工具。 hprof代理的一些功能更好的替代了更好的选择。

删除Jhat工具

Java已在其新发行版JDK 9中删除了jhat工具。

验证JVM命令行标志参数

Java会验证所有数字JVM命令的参数行标志以避免失败。如果参数无效或超出范围,则会显示一条适当的错误消息。

已经对范围和可选值要求数值的约束进行了检查。

jlink: Java链接器

jlink是一种可用于将一组模块组装到运行时映像中的工具。

链接时间是编译和运行时之间的一个阶段,jlink在此处用于将模块链接和组装到运行时图像。

数据报传输层安全性(DTLS)

DTLS是用于在数据报上构造TLS的协议。 JSSE(Java安全套接字扩展)API支持DTLS协议以及1.0和1.2版本。

TLS协议需要一个TCP,因此不能用于保护不可靠的数据报流量。

TLS应用层协议协商扩展

此扩展允许TLS连接中的客户端和服务器协商应用程序协议。客户端服务器进行通信并相互通知有关支持的应用程序协议。在TLS握手中完成的应用程序协议协商。

用于TLS的OCSP装订

OCSP(在线证书状态协议)有助于通过TLS连接的服务器进行检查撤销的X.509证书撤销。在TLS握手服务器期间,请与OCSP响应者联系以获取证书。然后,服务器将撤销信息装订到客户端的证书中。

基于DRBG的SecureRandom实现

Java 9包括DRBG(确定性随机位生成器)机制的功能。按照SecureRandom API中NIST SP 800-90Ar1的规定进行。

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算法增强功能:

SUN提供程序: SHA3-224,SHA3-256,SHA3-384和SHA3-512
OracleUcrypto提供程序: Solaris 12.0支持的SHA-3摘要

弃用Java插件

JDK 9中弃用了Java插件和applet技术。在将来的版本中,这些技术将被删除。

需要Java Plug-in才能在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中已删除了不推荐使用的垃圾收集器组合。以下是新版本中不支持的垃圾收集器组合。

DefNew + CMS
ParNew + SerialOld
增量CMS

统一的GC日志记录

使用统一的JVM日志记录框架重新实现垃圾收集日志记录。

弃用并发标记扫描(CMS)垃圾收集器

不建议使用并行标记扫描(CMS)垃圾收集器。在命令行上请求时,它将发出警告消息。 Garbage-First(G1)垃圾收集器旨在替代大多数CMS。

流程API更新

流程API的方法和方法得到了改进接口。该API处理操作系统进程。

ProcessHandle类用于获取进程的本机进程ID,参数,命令,开始时间,累积的CPU时间,用户,父进程和后代。

紧凑的字符串

在新版本中,Java对字符串使用了更节省空间的内部表示形式。在以前的版本中,字符串存储在char数组中,每个字符占用两个字节。现在,字符串的新内部表示形式是字节类。

平台记录API和服务

java.util.logging API可帮助记录消息,以及面向消费者的服务接口。应用程序或库可以提供此服务的实现,以将消息记录到记录框架。如果没有提供实现,它将使用默认实现。

更多并发更新

更多并发更新已添加到JDK9。这些更新是改进的CompletableFuture API和可互操作的发布-订阅框架。

XML目录

添加了标准XML目录API,该API支持组织OASIS(结构化信息标准)XML目录1.1版。该API由可以用作JAXP处理器内在函数的catalog-resolver组成。

集合的便捷工厂方法

此功能使创建实例更加容易和少量元素的地图集。一些新方法已添加到"列表","设置"和"映射"以创建不可变实例。例如:

Set

字母= Set.of(1、2、3);

增强弃用

@改进了不推荐使用的注释,以提供有关API的状态和预期处置的更好信息。添加了以下新元素。

@Deprecated(forRemoval = true): 表明该API将从将来的Java版本中删除。
@Deprecated(since ="version"): : 它包含Java SE版本字符串,该字符串指示Java 9的API版本已弃用。

自旋等待提示

它使Java代码能够通知自旋循环正在执行。自旋循环反复检查条件是否为真,例如何时可以获取锁,然后可以安全地执行一些计算,然后释放锁。该API仅仅是提示,不包含语义行为要求。

过滤传入的序列化数据

它有助于过滤对象序列化数据的传入流的日期。以提高鲁棒性和安全性。对象序列化客户端可以更轻松地验证其输入,导出的远程方法调用(RMI)对象也可以更轻松地验证调用参数。
序列化客户端实现在ObjectInputStream上设置的筛选器接口。对于RMI,该对象是通过RemoteServerRef导出的,该RemoteServerRef设置了MarshalInputStream上的过滤器,以验证未编组的调用参数。

Stack-Walking API

Java包含一个堆栈遍历API,该API允许延迟访问堆栈中的信息。

如果配置了堆栈行进器,则该堆栈行进API允许访问Class对象。

Nashorn的解析器API

Java添加了Parser API,该API允许在服务器端框架,特定的IDE等中使用Enable应用程序。

它可用于从字符串,URL或URL解析ECMAScript代码。解析器类方法的文件。此类的方法返回CompilationUnitTree类的对象,该对象将ECMAScript代码表示为抽象语法树。

Nashorn解析器API位于jdk.nashorn.api.tree包中。

在Nashorn中实现选定的ECMAScript 6功能

Java在ECMA-62的第6版中为Nashorn添加了一些新功能。以下是已实现的功能。

模板字符串
let,const和block作用域
迭代器和for..of循环
地图,集合,WeakMap和WeakSet
符号
二进制和八进制文字

准备用于模块化的JavaFX UI控件和CSS API

Java包括用于CSS功能和JavaFX UI控件的公共API。这些功能以前只能通过内部程序包获得,但由于采用模块化方法,因此现在可以访问。

BeanInfo注释

@beaninfo Javadoc标记已替换为注释类型JavaBean,BeanProperty和SwingContainer。

p>

我们可以直接在Bean类中使用这些属性。它还允许自动删除自动创建的类,并在运行时的BeanInfo生成期间设置相应的功能属性。

TIFF图像I/O

TIFF(标记图像文件)格式)被添加为标准的读写方式。它位于包javax.imageio中。添加了一个新的软件包javax.imageio.plugins.tiff,以提供简化TIFF元数据可选操作的类。

Windows和Linux上的HiDPI图形

在Windows和Linux上自动缩放和调整AWT和Swing组件,以实现每英寸高点(HiDPI)显示。

JDK已在OS X上支持HiDPI"视网膜显示"。

以前在此版本中,在Windows和Linux上,Java应用程序是根据像素调整大小和呈现的,即使在HiDPI显示器上,其像素密度也可以是传统显示器的2-3倍。这导致GUI组件和窗口太小而无法阅读或使用。

特定于平台的桌面功能

在java.awt中添加了一些新方法。桌面类。这些方法提供以下功能。

显示自定义的"关于"和"首选项"窗口。
处理打开或打印文件列表的请求。
Handle请求打开URL。
打开本机帮助查看器应用程序。
设置默认菜单栏。
启用或禁用要突然终止的应用程序。

在Linux上启用GTK 3

Java新版本允许Java图形应用程序(JavaFX,Swing或Abstract Window Toolkit)在Linux上使用GTK版本。

JDK默认使用GTK +2,如果不可用,则使用GTK + 3。

我们可以通过设置jdk.gtk.version属性来使用特定版本。

Unicode 8.0

Java在其新Java 9版本中支持Unicode 8.0,以前使用的是Unicode 6.2。

Java 9支持Unicode 6.3、7.0和8.0标准,这些标准结合了引入的10,555个字符,29个脚本和42个块。

默认情况下启用的CLDR语言环境数据

CLDR(公共语言环境数据存储库)表示Unicode CLDR项目提供的语言环境数据。它最初是在JDK 8中添加的,现在是JDK 9中的默认值。

我们可以通过将属性java.locale.providers设置为CLAT之前的COMPAT值来启用与Java 8兼容的行为。

UTF-8属性文件

UTF-8是表示非拉丁字符的便捷方法。 Java的新版本以UTF-8编码加载属性文件。在早期版本中,加载属性资源束时使用ISO-8859-1编码。

Java删除了认可标准覆盖机制和扩展机制。
rt.jar和tools.jar 均已从JRE中删除。
默认情况下,无法访问JDK的内部API。