Java 9新功能

甲骨文发布了具有丰富的新功能的Java 9。它包括对Java编程, JVM, 工具和库的各种升级。在本教程中, 我们将讨论下面给出的所有主要功能。

  • 平台模块系统(项目拼图)
  • 接口私有方法
  • 试用资源
  • 匿名类
  • @SafeVarargs批注
  • 收集工厂方法
  • 流程API改进
  • 新版本字符串方案
  • JShell:Java Shell(REPL)
  • 流程API改进
  • 控制面板
  • 流API改进
  • 适用于Microsoft Windows的安装程序增强功能以??及更多其他功能
Java平台模块系统(项目拼图)
它是一种新型的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中, 只要推断类型是可表示的, 我们就可以在创建匿名内部类时使用菱形运算符。
欲了解更多信息, 请点击此处
Java @SafeVarargs批注
它是一种注释, 适用于采用varargs参数的方法或构造函数。它用于确保该方法不会对其varargs参数执行不安全的操作。
它包含在Java 7中, 只能应用于
  • 最终方法
  • 静态方法
  • 建设者
欲了解更多信息, 请点击此处
Java Collection Factory方法
工厂方法是静态方法的一种特殊类型, 用于创建集合的不可修改实例。这意味着我们可以使用这些方法来创建少量元素的列表, 集合和映射。
它是不可修改的, 因此添加新元素将引发java.lang.UnsupportedOperationException
欲了解更多信息, 请点击此处
Java Process API改进
Java改进了Java 9版本的过程API, 该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可用性的通知。
User Experience 在更新JRE时, 它增强了用户体验。
添加更多诊断命令
Java 9添加了一些新命令来改善诊断问题。这些诊断命令用于诊断Hotspot和JDK。
【Java 9新功能】Java jcmd实用程序可用于将诊断命令请求发送到正在运行的Java虚拟机(JVM)。
删除启动时JRE版本选择
Java 9在启动时删除了JRE(Java运行时环境)版本选择。如今, 现代应用程序具有自己的活动安装程序, 该安装程序进一步包含管理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安全套接字扩展)API支持DTLS协议以及1.0和1.2版本。
TLS协议需要一个TCP, 因此不能用于保护不可靠的数据报流量。
TLS应用层协议协商扩展
此扩展允许TLS连接中的客户端和服务器协商应用程序协议。客户端服务器进行通信并相互通知有关支持的应用程序协议。在TLS握手中完成了应用协议协商。
TLS的OCSP装订
OCSP(在线证书状态协议)可帮助TLS连接中的服务器检查已撤销的X.509证书吊销。在TLS握手服务器期间, 请与OCSP响应者联系以获取证书。然后, 服务器将撤销信息装订到客户端的证书中。
基于DRBG的SecureRandom实现
Java 9包括SecureRandom API中NIST SP 800-90Ar1中指定的DRBG(确定性随机位生成器)机制的功能。
DRBG机制使用了像SHA-512和AES-256一样强大的现代算法。这些机制中的每一个都可以配置为具有不同的安全强度和功能, 以匹配用户需求。
禁用SHA-1证书
JDK的安全配置已得到改进。它提供了更灵活的机制来禁用具有基于SHA-1签名的X.509证书。
jdk.certpath.disabledAlgorithms安全性属性通过几个新的约束得到增强, 这些约束允许对可以禁用的证书类型进行更好的控制。
默认情况下创建PKCS12密钥库
默认密钥库类型已从JKS修改为PKCS12。 PKCS是用于存储密码密钥的可扩展, 标准且得到广泛支持的格式。它通过存储私钥, 受信任的公钥证书等来提高机密性。此功能还为与其他系统(如Mozilla, Microsoft的Internet Explorer和支持PKCS12的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插件
Java插件和applet技术已在JDK 9中弃用。在将来的版本中, 这些技术将被删除。
需要Java Plug-in才能在Web浏览器中运行applet和JavaFX应用程序。建议将应用程序重写为Java Web应用程序。
增强的Java控制面板
Java控制面板得到了改进, 信息更易于查找, 搜索字段可用, 并且不再使用模式对话框。请注意, 某些选项的位置已从Java控制面板的早期版本中更改。
模块化Java应用程序打包
Java新版本将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更新
Process API的方法和接口得到了改进。该API处理操作系统进程。
ProcessHandle类用于获取进程的本机进程ID, 参数, 命令, 开始时间, 累积的CPU时间, 用户, 父进程和后代。
紧凑弦
在新版本中, Java使用更节省空间的内部表示形式来表示字符串。在以前的版本中, 字符串存储在char数组中, 每个字符占用两个字节。现在, 字符串的新内部表示形式是字节类。
平台记录API和服务
java.util.logging API有助于记录消息以及用于使用者的服务接口。应用程序或库可以提供此服务的实现, 以将消息记录到记录框架。如果未提供任何实现, 它将使用默认实现。
更多并发更新
JDK 9中添加了更多的并发更新。这些更新是改进的CompletableFuture API和可互操作的发布-订阅框架。
XML目录
添加了标准XML目录API, 该API支持OASIS(结构化信息标准)XML目录1.1版的组织。该API由catalog-resolver组成, 可以与JAXP处理器一起使用。
便利工厂收集方法
此功能使创建具有较少元素的集合和地图实例更加容易。一些新方法被添加到列表, 设置和映射中以创建不可变实例。例如:
Set < String> 字母= Set.of(1、2、3);
增强的弃用
@Deprecated注释已得到改进, 以提供有关API的状态和预期处置的更好信息。添加了以下新元素。
  • @Deprecated(forRemoval = true):表示将从将来的Java版本中删除该API。
  • @Deprecated(since =“ version”):它包含Java SE版本字符串, 该字符串指示Java 9弃用的API元素。
旋转等待提示
它使Java代码能够通知自旋循环正在执行。自旋循环反复检查条件是否为真, 例如何时可以获取锁, 然后可以安全地执行一些计算, 然后释放锁。该API纯粹是一个提示, 不包含语义行为要求。
筛选传入的序列化数据
它有助于过滤传入的对象序列化数据流的日期, 以提高鲁棒性和安全性。对象序列化客户端可以更轻松地验证其输入, 导出的远程方法调用(RMI)对象也可以更轻松地验证调用参数。
序列化客户端实现在ObjectInputStream上设置的筛选器接口。对于RMI, 该对象通过RemoteServerRef导出, 该RemoteServerRef在MarshalInputStream上设置过滤器以验证调用参数在未编组时的状态。
堆栈步行API
Java包含一个堆栈遍历API, 该API允许延迟访问堆栈中的信息。它还可以轻松过滤信息。
如果已配置堆栈遍历器, 则此堆栈遍历API允许访问Class对象。
Nashorn的解析器API
Java添加了Parser API, 该API允许用于在服务器端框架, 特定的IDE等中启用应用程序。
可以使用Parser类的方法从字符串, URL或文件中解析ECMAScript代码。此类的方法返回CompilationUnitTree类的对象, 该对象将ECMAScript代码表示为抽象语法树。
Nashorn解析器API位于jdk.nashorn.api.tree包中。
在Nashorn中实施选定的ECMAScript 6功能
Java在第六版ECMA-62中为Nashorn添加了一些新功能。以下是已实现的功能。
  • 模板字符串
  • let, const和block范围
  • 迭代器和for..of循环
  • 映射, 设置, WeakMap和WeakSet
  • 符号
  • 二进制和八进制文字
准备JavaFX UI控件和CSS API以进行模块化
Java包括用于CSS功能和JavaFX UI控件的公共API。这些功能以前只能通过内部程序包获得, 但是由于采用模块化方法, 现??在可以访问。
包括一个新软件包javafx.scene.control.skin, 该软件包由一组类组成, 以提供每个UI(用户界面)控件的默认实现。
BeanInfo批注
@beaninfo Javadoc标记已替换为注释类型JavaBean, BeanProperty和SwingContainer。
我们可以直接在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.Desktop类中。这些方法提供以下功能。
  • 显示自定义的关于和首选项窗口。
  • 处理打开或打印文件列表的请求。
  • 处理打开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标准, 这些标准结合了引入的10555个字符, 29个脚本和42个块。
默认情况下启用了CLDR语言环境数据
CLDR(公共语言环境数据存储库)表示Unicode CLDR项目提供的语言环境数据。它最初是在JDK 8中添加的, 现在在JDK 9中是默认的。
通过将属性java.locale.providers设置为CLDR之前的COMPAT值, 可以启用与Java 8兼容的行为。
UTF-8属性文件
UTF-8是表示非拉丁字符的便捷方法。 Java的新版本以UTF-8编码加载属性文件。在早期版本中, 加载属性资源束时使用ISO-8859-1编码。
  • Java删除了认可标准覆盖机制和扩展机制。
  • rt.jar和tools.jar都已从JRE中删除。
  • 默认情况下, 无法访问JDK的内部API。

    推荐阅读