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

  • 平台模块系统(Jigsaw项目)
  • 接口私有方法
  • Try-With Resources
  • 匿名类
  • @SafeVarargs注释
  • 集合工厂方法
  • Process API改进
  • 新版本字符串方案
  • JShell:javashell(REPL)
  • 控制面板
  • 流API改进
  • 针对Microsoft windows及更多应用程序的安装程序增强功能

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

它是一种新的Java编程组件,可以用来收集Java代码(类和包)。这个项目的主要目标是轻松地将应用程序缩小到小型设备。在Java9中,JDK本身已经划分为一组模块,以使其更加轻量级。它还允许我们开发模块化应用程序。

接口私有方法

在Java9中,我们可以在接口中创建私有方法。接口允许我们声明有助于在非抽象方法之间共享公共代码的私有方法。

在Java9之前,在接口中创建私有方***导致编译时错误。

Try-With Resources

Java在java7中引入了 try-with-resource 特性,该特性有助于在使用资源后自动关闭资源。

换句话说,我们可以说我们不需要显式地关闭资源(文件、连接、网络等),尝试使用 AutoClosable 接口自动关闭资源。

在Java7中,try with resources有一个限制,要求resource在区块中本地声明。

匿名类改进

Java9引入了一个新特性,允许我们将 diamond 运算符用于匿名类。Java7中不允许在匿名类中使用 diamond 。

在Java9中,只要推断的类型是可表示的,我们就可以在创建匿名内部类时使用菱形运算符。

Java@SafeVarargs注释

它是应用于接受 varargs 参数的方法或构造函数的注释。它用于确保方法不会对其 varargs参数执行不安全的操作。

它包含在Java7中,只能应用于

  • 最终方法
  • 静态方法
  • 构造函数

Java集合工厂方法

工厂方法是一种特殊类型的静态方法,用于创建集合的不可修改实例。这意味着我们可以使用这些方法创建少量元素的列表、集合和映射。

它是 不可修改 的,因此添加新元素将引发 java.lang.UnsupportedOperationException 异常

Java Process API改进

Java改进了java9版本中的process api,有助于管理和控制操作系统进程。

在早期版本中,使用Java编程来管理和控制操作系统进程非常复杂。现在,添加了新的类和接口来执行此任务。

Java新版本字符串方案

Java版本字符串是包含特定于版本的信息的格式。此版本字符串由主要版本、次要版本、安全版本和修补程序更新版本组成。

在java9中,引入了一种新的字符串格式。

JShell:javashell(REPL)

它是一个交互式Javashell工具,它允许我们从Shell执行Java代码并立即显示输出。JShell是一个REPL(Read Evaluate Print Loop)工具,从命令行运行。如果我们想测试我们的业务逻辑并立即得到结果,这是有益的。

Java 9控制面板

Java控制面板用于控制嵌入在浏览器中的Java应用程序。此控制面板维护管理嵌入在浏览器中的Java应用程序的设置。

在Java9中,控制面板被重写为JavaFX应用程序,并且存储位置发生了变化。

Java9流API改进

在Java9中,流API得到了改进,并向流接口添加了新方法。 TakeWhile 、 dropWhile 和 ofNullable ,以及一个重载迭代方法来对流元素执行操作。

Microsoft windows安装程序增强

Java9包括 MicrosoftWindowsInstaller 的改进版本,并添加了以下特性。

这个安装程序允许我们启用和禁用web部署。我们可以通过选择Customsetup、install并单击安装程序的欢迎页面中的复选框来启用web部署。

macOS安装程序增强功能

Java9在macOS安装程序中包含以下特性。

添加更多诊断命令

Java9添加了一些新命令来改进诊断问题。这些诊断命令用于诊断热点和JDK。

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

删除启动时JRE版本选择

Java9在启动时删除了JRE(Java运行时环境)版本选择。现在,现代应用程序拥有自己的活动安装程序,其中进一步包含管理JRE的方法。

删除JVM TI hprof代理

Java9已经从现有的JDK中删除了hprof。它不打算成为生产工具。一些性能更好的hprof代理已被取代,以获得更好的替代品。

拆下Jhat工具

Java在其新版本JDK9中删除了jhat工具。它是jdk6中添加的一个实验性的、不受支持的工具,现在已经过时了。

验证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装订

OCSP(联机证书状态协议)帮助TLS连接中的服务器检查吊销的X.509证书吊销。在TLS握手服务器期间,请与OCSP相应程序联系以获取证书。然后,服务器将吊销信息装订到客户端的证书上。

基于DRBG的安全随机实现

Java9包含了SecureRandom API中NIST SP800-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.message 摘要API支持各种算法,如:SHA3-224、SHA3-256、SHA3-384和SHA3-512。

以下提供程序支持SHA-3算法增强功能:

  • SUN提供程序:SHA3-224、SHA3-256、SHA3-384和SHA3-512
  • OracleUcrypto提供程序:solaris12.0支持的SHA-3摘要

弃用Java插件

Java插件和applet技术在jdk9中遭到了抨击。在未来的版本中,这些技术将被删除。

在web浏览器中运行applet和JavaFX应用程序需要Java插件。建议将应用程序重写为javaweb应用程序。

增强的Java控制面板

Java控制面板已经改进,信息更容易定位,搜索字段可用,不再使用模式对话框。请注意,一些选项的位置与以前版本的Java控制面板不同。

模块化Java应用程序打包

Java新版本将来自project jigsaw的特性集成到Java包中,包括模块感知和自定义运行时创建。

我们可以使用jlink工具来创建更小的包。

简化的Doclet API

旧的Doclet API被一个新的简化API所取代,该API利用了其他标准的、现有的API。在Java9中,标准的doclet被重写为使用新的DocletAPI。

编译器控件

现在,我们可以通过编译器指令选项来控制JVM编译。控制级别是运行时可管理的,并且是特定于方法的。编译器控件取代CompileCommand,并且向后兼容。

分段代码缓存

代码缓存被划分为不同的段。每一段都是一段经过编译的代码,可以提高性能并实现可扩展性。

统一JVM日志记录

Java新版本为JVM的所有组件引入了一个通用的日志系统。

删除jdk8中不推荐的GC组合

不推荐使用的垃圾收集器组合已从JDK 9中删除。以下是新版本中不支持的垃圾收集器组合。

  • DefNew + CMS
  • ParNew + SerialOld
  • Incremental CMS

统一GC日志记录

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

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

不推荐使用并发标记扫描(CMS)垃圾收集器。当命令行请求时,它会发出警告消息。垃圾优先(garbagefirst,G1)垃圾收集器旨在替代CMS的大多数用途。

Process API更新

ProcessAPI通过方法和接口得到了改进。这个API处理操作系统进程。

ProcessHandle 类用于获取进程的本机进程ID、参数、命令、开始时间、累计CPU时间、用户、父进程和子进程。

压缩字符串

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

平台日志API和服务

这个 java.util.logging 文件API有助于记录消息,并为消费者提供服务接口。应用程序或库可以提供此服务的实现,以将消息记录到日志框架。如果没有提供实现,则使用默认实现。

更多并发更新

jdk9中添加了更多的并发更新。这些更新是经过改进的可完成的未来API和可互操作的发布-订阅框架。

XML目录

添加了标准XML目录API,它支持组织推进OASIS(结构化信息标准)XML目录1.1版。这个API由目录解析器组成,它可以作为JAXP处理器的一个内在函数。

方便工厂集合方法

此功能使创建包含少量元素的集合和映射的实例变得更容易。在 List 、 Set 和 Map 中添加了一些新的方法来创建不可变的实例。例如:

Set<String> alphabet = Set.of(1, 2, 3);

增强型Deprecation

对 @Deprecated 注释进行了改进,以提供有关API的状态和预期处置得更好信息。添加了以下新元素。

@Deprecated(forremovation=true)
@Deprecated(since=“version”)

旋转等待提示

它使Java代码能够通知正在执行自旋循环。自旋循环反复检查某个条件是否为真,例如何时可以获取锁,之后可以安全地执行一些计算,然后释放锁。这个API纯粹是一个提示,没有语义行为需求。

筛选传入序列化数据

它有助于过滤对象序列化数据流的传入日期,以提高健壮性和安全性。对象序列化客户端可以更容易地验证其输入,而导出的远程方法调用(RMI)对象也可以更容易地验证调用参数。

序列化客户端实现在 ObjectInputStream 上设置的筛选器接口。对于RMI,对象通过 RemoteServerRef 导出, RemoteServerRef 在 marshallinputstream 上设置过滤器,以便在调用参数解组时验证它们。

堆栈遍历API

Java包含了一个堆栈遍历API,允许对堆栈中的信息进行延迟访问。它还可以方便地过滤信息。

如果配置了 stack walker ,那么这个stack walking API允许访问类对象。

Nashorn的解析器API

Java添加了解析器API,允许在服务器端框架中启用应用程序,特别是IDE等。。

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

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

在Nashorn中实现选定的ECMAScript 6特性

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

  • 模板字符串
  • let、const和block范围
  • 循环的迭代器和for
  • 映射、集、WeakMap和WeakSet
  • 符号
  • 二进制和八进制文字

为模块化准备javafxui控件和cssapi

Java包括用于CSS功能和JavaFXUI控件的公共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已经在osx上支持HiDPI“retina displays”。

在此版本之前,在Windows和Linux上,Java应用程序的大小和渲染都是基于像素的,甚至在HiDPI显示器上,其像素密度可能是传统显示器的2到3倍。这导致GUI组件和窗口太小,无法读取或使用。

特定于平台的桌面功能

一些新方法被添加到 java.awt.Desktop 类。这些方法提供以下特性。

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

在Linux上启用GTK 3

Java新版本允许Java图形应用程序(JavaFX、Swing或抽象窗口工具包)在Linux上使用GTK版本。

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

我们可以通过设置jdk.gtk.版本.

Unicode 8.0标准

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

Java9支持Unicode 6.3、7.0和8.0标准,这些标准结合了10555个字符、29个脚本和42个块。

默认情况下启用CLDR区域设置数据

CLDR(公共区域设置数据存储库)表示Unicode CLDR项目提供的区域设置数据。它最初是在jdk8中添加的,现在是jdk9中的默认值。

我们可以通过设置属性来启用与Java8兼容的行为 java.locale.providers 提供程序一个值,COMPAT在CLDR之前。

UTF-8属性文件

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

  • Java删除了认可的标准覆盖机制和扩展机制。
  • 这个rt.jar以及tools.jar两者都已从JRE中删除。
  • 默认情况下,JDK的内部api是不可访问的。

原文链接:http://javakk.com/1411.html

如果觉得本文对你有帮助,可以关注一下我公众号,回复关键字【面试】即可得到一份Java核心知识点整理与一份面试大礼包!另有更多技术干货文章以及相关资料共享,大家一起学习进步!