📅  最后修改于: 2020-10-14 00:35:40             🧑  作者: Mango
甲骨文发布了具有丰富的新功能的Java 9。它包括对Java编程,JVM,工具和库的各种升级。在本教程中,我们将讨论下面给出的所有主要功能。
它是一种新型的Java编程组件,可用于收集Java代码(类和包)。该项目的主要目标是轻松地将应用程序缩小到小型设备。在Java 9中,JDK本身分成了多个模块集,以使其更加轻巧。它还使我们能够开发模块化应用程序。
欲了解更多信息,请点击这里
在Java 9中,我们可以在接口内创建私有方法。接口允许我们声明私有方法,这些方法有助于在非抽象方法之间共享通用代码。
在Java 9之前,在接口内创建私有方法会导致编译时错误。欲了解更多信息,请点击这里
Java在Java 7中引入了try-with-resource功能,该功能有助于在使用后自动关闭资源。
换句话说,我们可以说我们不需要显式关闭资源(文件,连接,网络等),而是使用AutoClosable接口尝试使用资源自动关闭资源。
在Java 7中,try-with-resources有一个限制,要求资源在其块内本地声明。
欲了解更多信息,请点击这里
Java 9引入了一项新功能,该功能允许我们将Diamond运算符与匿名类一起使用。 Java 7中不允许将Diamond与匿名类一起使用。
在Java 9中,只要推断类型是可表示的,就可以在创建匿名内部类时使用菱形运算符。
欲了解更多信息,请点击这里
它是一种注释,适用于采用varargs参数的方法或构造函数。它用于确保该方法不会对其varargs参数执行不安全的操作。
它包含在Java 7中,只能应用于
欲了解更多信息,请点击这里
工厂方法是静态方法的一种特殊类型,用于创建集合的不可修改实例。这意味着我们可以使用这些方法来创建少量元素的列表,集合和映射。
它是不可修改的,因此添加新元素将引发java.lang.UnsupportedOperationException
欲了解更多信息,请点击这里
Java改进了Java 9版本的流程API,该API有助于管理和控制操作系统流程。
在早期版本中,使用Java编程来管理和控制操作系统进程很复杂。现在,添加了新的类和接口来执行此任务。
欲了解更多信息,请点击这里
Java版本字符串是一种包含版本特定信息的格式。此版本字符串包含主要,次要,安全性和修补程序更新版本。
在Java 9中,引入了新的版本字符串方案。欲了解更多信息,请点击这里。
它是一个交互式Java Shell工具,它使我们能够从Shell中执行Java代码并立即显示输出。 JShell是一个REPL(读取评估打印循环)工具,可从命令行运行。如果我们想测试我们的业务逻辑并立即获得结果,那是有益的。欲了解更多信息,请点击这里
Java控制面板用于控制嵌入在浏览器中的Java应用程序。该控制面板保留用于管理浏览器中嵌入的Java应用程序的设置。
在Java 9中,控制面板被重写为JavaFX应用程序,并且存储位置已更改。欲了解更多信息,请点击这里。
在Java 9中,改进了Stream API,并将新方法添加到Stream接口。添加了TakeWhile,dropWhile和ofNullable以及一个重载的迭代方法,以对流元素执行操作。欲了解更多信息,请点击这里。
Java 9包括Microsoft Windows安装程序的改进版本,并添加了以下功能。
此安装程序使我们可以启用和禁用Web部署。我们可以通过选择“自定义安装”来启用Web部署,安装并单击安装程序欢迎页面中的复选框。
Java 9在macOS安装程序中包含以下功能。
Feature | Description |
---|---|
CPU Version Availability | It provides notification on next CPU availability after uninstalling the current CPU version. |
User Experience | It enhanced user experience while updating the JRE. |
Java 9添加了一些新命令来改善诊断问题。这些诊断命令用于诊断Hotspot和JDK。
Java jcmd实用程序可用于将诊断命令请求发送到正在运行的Java虚拟机(JVM)。
Java 9已在启动时删除了JRE(Java运行时环境)版本选择。如今,现代应用程序具有自己的活动安装程序,该安装程序进一步包含管理JRE的方法。这就是为什么删除JRE版本选择的原因。
Java 9已从现有的JDK中删除了hprof。它并不是要成为生产工具。 hprof代理的某些更好功能已被替代,以提供更好的替代方法。
Java已在其新发行版JDK 9中删除了jhat工具。这是JDK 6中添加的实验性和不受支持的工具,现已过时。
Java会验证所有数字JVM命令行标志的参数,以避免失败。如果参数无效或超出范围,则会显示相应的错误消息。
已对范围和要求数字值的可选实现约束检查。
jlink是一种工具,可用于将一组模块组装到运行时映像中。它还允许我们将模块的依赖项组装到自定义运行时映像中。
链接时间是编译和运行时之间的一个阶段,jlink在那里工作,用于将模块链接和组装到运行时映像。
DTLS是用于在数据报上构造TLS的协议。 JSSE(Java安全套接字扩展)API支持DTLS协议以及1.0和1.2版本。
TLS协议需要一个TCP,因此不能用于保护不可靠的数据报流量。
此扩展允许TLS连接中的客户端和服务器协商应用程序协议。客户端服务器进行通信,并相互通知支持的应用程序协议。在TLS握手中完成了应用程序协议协商。
OCSP(在线证书状态协议)可帮助TLS连接中的服务器检查已撤销的X.509证书吊销。在TLS握手服务器期间,请与OCSP响应者联系以获取证书。然后,服务器将撤销信息装订到客户端的证书中。
Java 9包括在SecureRandom API中的NIST SP 800-90Ar1中指定的DRBG(确定性随机位生成器)机制的功能。
DRBG机制使用了像SHA-512和AES-256一样强大的现代算法。这些机制中的每一个都可以配置为具有不同的安全强度和功能,以匹配用户需求。
JDK的安全配置已得到改进。它提供了更灵活的机制来禁用具有基于SHA-1签名的X.509证书。
jdk.certpath.disabledAlgorithms安全性属性通过几个新的约束得到增强,这些约束允许对可以禁用的证书类型进行更好的控制。
默认密钥库类型已从JKS修改为PKCS12。 PKCS是用于存储密码密钥的可扩展,标准且得到广泛支持的格式。它通过存储私钥,受信任的公钥证书等来提高机密性。此功能还为与其他系统(如Mozilla,Microsoft的Internet Explorer和支持PKCS12的OpenSSL)进行互操作提供了机会。
新的Java版本支持SHA-3加密哈希函数。
java.security.MessageDigest API支持各种算法,例如:SHA3-224,SHA3-256,SHA3-384和SHA3-512。
以下提供程序支持SHA-3算法增强功能:
Java插件和applet技术已在JDK 9中弃用。在将来的版本中,这些技术将被删除。
需要Java Plug-in才能在Web浏览器中运行applet和JavaFX应用程序。建议将应用程序重写为Java Web应用程序。
Java控制面板得到了改进,信息更易于查找,搜索字段可用,并且不再使用模式对话框。请注意,某些选项的位置已从Java控制面板的早期版本中更改。
Java新版本将Jigsaw项目中的功能集成到Java Packager中,包括模块识别和自定义运行时创建。
我们可以使用jlink工具来创建较小的包。
旧的Doclet API被新的简化的API取代,该API可以利用其他现有的标准API。在Java 9中,标准doclet已被重写为使用新的Doclet API。
现在,我们可以通过编译器指令选项控制JVM的编译。控制级别是运行时可管理的和特定于方法的。编译器控件取代了CompileCommand,并且向后兼容。
代码缓存分为不同的段。每个段都是编译后的代码,可提高性能并实现可扩展性。
Java新版本为JVM的所有组件引入了通用的日志记录系统。
JDK 9中已删除了不赞成使用的垃圾收集器组合。以下是新版本中不支持的垃圾收集器组合。
使用统一的JVM日志记录框架可以重新实现垃圾收集日志记录。
并发标记扫描(CMS)垃圾收集器已弃用。在命令行上请求时,它将发出警告消息。 Garbage-First(G1)垃圾收集器旨在替代大多数CMS。
Process API的方法和接口得到了改进。该API处理操作系统进程。
ProcessHandle类用于获取进程的本机进程ID,参数,命令,开始时间,累积的CPU时间,用户,父进程和后代。
在新版本中,Java对字符串使用更节省空间的内部表示形式。在以前的版本中,字符串存储在char数组中,每个字符占用两个字节。现在,字符串的新内部表示形式是字节类。
java.util.logging API有助于记录消息以及用于使用者的服务接口。应用程序或库可以提供此服务的实现,以将消息记录到记录框架。如果未提供任何实现,它将使用默认实现。
JDK 9中添加了更多的并发更新。这些更新是改进的CompletableFuture API和可互操作的发布-订阅框架。
添加了标准XML目录API,该API支持OASIS(结构化信息标准)XML目录1.1版的组织。该API由catalog-resolver组成,可以与JAXP处理器一起使用。
此功能使创建具有少量元素的collection和map的实例更加容易。一些新方法被添加到列表,设置和映射中以创建不可变实例。例如:
组
@Deprecated注释已得到改进,以提供有关API的状态和预期处置的更好信息。添加了以下新元素。
它使Java代码能够通知自旋循环正在执行。自旋循环反复检查条件是否为真,例如何时可以获取锁,然后可以安全地执行一些计算,然后释放锁。该API纯粹是一个提示,不包含语义行为要求。
它有助于过滤传入的对象序列化数据流的日期,以提高鲁棒性和安全性。对象序列化客户端可以更轻松地验证其输入,导出的远程方法调用(RMI)对象也可以更轻松地验证调用参数。
序列化客户端实现在ObjectInputStream上设置的筛选器接口。对于RMI,该对象是通过RemoteServerRef导出的,该RemoteServerRef在MarshalInputStream上设置过滤器以验证调用参数未编组时的状态。
Java包含一个堆栈遍历API,该API允许延迟访问堆栈中的信息。它还可以轻松过滤信息。
如果已配置堆栈遍历器,则此堆栈遍历API允许访问Class对象。
Java添加了Parser API,该API允许在服务器端框架,特定的IDE等中使用Enable应用程序。
它可以用于使用Parser类的方法从字符串,URL或文件中解析ECMAScript代码。此类的方法返回CompilationUnitTree类的对象,该对象将ECMAScript代码表示为抽象语法树。
Nashorn解析器API位于jdk.nashorn.api.tree包中。
Java在第六版ECMA-62中为Nashorn添加了一些新功能。以下是已实现的功能。
Java包含用于CSS功能和JavaFX UI控件的公共API。这些功能以前只能通过内部程序包获得,但是由于采用模块化方法,现在可以访问。
包括一个新软件包javafx.scene.control.skin,该软件包由一组类组成,以提供每个UI(用户界面)控件的默认实现。
@beaninfo Javadoc标记已替换为注释类型JavaBean,BeanProperty和SwingContainer。
我们可以直接在Bean类中使用这些属性。它还允许自动删除自动创建的类,并在运行时的BeanInfo生成期间设置相应的功能属性。
TIFF(标签图像文件格式)已添加为标准读写功能。它位于包javax.imageio中。添加了另一个新包javax.imageio.plugins.tiff,以提供简化TIFF元数据可选操作的类。
在Windows和Linux上自动缩放和调整AWT和Swing组件,以实现每英寸高点(HiDPI)显示。
JDK已经在OS X上支持HiDPI“视网膜显示器”。
在此版本之前,在Windows和Linux上,Java应用程序是根据像素调整大小和呈现的,即使在HiDPI显示器上,其像素密度也可以是传统显示器的2-3倍。这导致GUI组件和窗口太小而无法阅读或使用。
一些新方法被添加到java.awt.Desktop类中。这些方法提供以下功能。
Java新版本允许Java图形应用程序(JavaFX,Swing或Abstract Window Toolkit)在Linux上使用GTK版本。
JDK默认使用GTK +2,如果不可用,则使用GTK + 3。
我们可以通过设置jdk.gtk.version的属性来使用特定版本。
Java在其新的Java 9版本中支持Unicode 8.0,以前使用的是Unicode 6.2。
Java 9支持Unicode 6.3、7.0和8.0标准,这些标准结合了引入的10555个字符,29个脚本和42个块。
CLDR(通用语言环境数据存储库)表示Unicode CLDR项目提供的语言环境数据。它最初是在JDK 8中添加的,现在在JDK 9中是默认的。
通过将属性java.locale.providers设置为CLDR之前的COMPAT值,可以启用与Java 8兼容的行为。
UTF-8是表示非拉丁字符的便捷方法。 Java的新版本以UTF-8编码加载属性文件。在早期版本中,加载属性资源束时使用ISO-8859-1编码。