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。