📜  Java 9 特性及示例

📅  最后修改于: 2022-05-13 01:55:31.212000             🧑  作者: Mango

Java 9 特性及示例

Java是由 Sun Microsystems 开发的通用高级编程语言。它是并发的、基于类的、面向对象的,并且专门设计为具有尽可能少的实现依赖关系。 Java旨在遵循“Write Once Run Anywhere” (WORA) 原则,即Java旨在独立于平台。要详细了解Java编程语言,请单击此处。与任何其他软件一样, Java在开发和改进时也有许多不同的版本,每次重大升级都会添加新功能。
Java 9 是Java 8 的一次重大升级,它为开发人员带来了许多功能。 Java 9 于 2017 年 9 月 21 日发布。在本文中,我们将详细研究Java 9 的特性:

1.改进的Javadoc

Java 9 更新附带更新的Java文档。我们不再需要使用 Google 来查找正确的文档。新的 Javadoc 带有在 API 文档本身中的搜索权。此外,Javadoc 输出符合 HTML5。每个 Javadoc 页面都包含有关类或接口来自哪个 JDK 模块的信息。

2. 集合的工厂方法(如 List、Map、Set 和 Map.Entry):

很多时候,您想在Java程序中创建一个集合(例如,List 或 Set)并用一些元素填充它。这会导致您在实例化集合的地方重复编码,然后进行几次“添加”调用。在Java 9 中,添加了几个所谓的集合工厂方法。
List 和 Set 接口具有“of()”方法来创建一个空的或非空的不可变 List 或 Set 对象,如下所示:
空列表示例:

List immutableList = List.of();

非空列表示例:

List immutableList = List.of("one", "two", "three");

Map 有两组方法:of() 方法和 ofEntries() 方法,分别创建一个 Immutable Map 对象和一个 Immutable Map.Entry 对象。
空地图示例:

jshell> Map emptyImmutableMap = Map.of()
emptyImmutableMap ==> {}

非空地图示例:

jshell> Map nonemptyImmutableMap = Map.of(1, "one", 2, "two", 3, "three")
nonemptyImmutableMap ==> {2=two, 3=three, 1=one}

3. JShell:交互式Java REPL

甲骨文公司推出了一种名为“jshell”的新工具。它代表Java Shell,也称为 REPL(读取评估打印循环)。许多语言已经具有交互式 Read-Eval-Print-Loop, Java现在加入了这个俱乐部。它用于非常轻松地执行和测试任何Java构造,如类、接口、枚举、对象、语句等。您可以从控制台启动 jshell 并直接开始输入和执行Java代码。 jshell 的即时反馈使其成为探索 API 和尝试语言特性的绝佳工具。

4. 流 API 改进:

在Java SE 9 中,Oracle Corp. 向Java.util.Stream 接口添加了四个有用的新方法。由于 Stream 是一个接口,所有这些新实现的方法都是默认方法。它允许您在集合上创建转换的声明性管道。 Stream 接口新增了四个方法:dropWhile、takeWhile、ofNullable。 iterate 方法获得了一个新的重载,允许您提供关于何时停止迭代的 Predicate。

5.接口中的私有方法:

在Java 8 中,我们可以使用默认和静态方法在接口中提供方法实现。但是我们不能在接口中创建私有方法。为了避免冗余代码和更多的可重用性,Oracle Corp. 在Java SE 9 接口中引入了私有方法。从Java SE 9 开始,我们也可以使用“private”关键字在接口中编写私有和私有静态方法。

public interface Card{

  private Long createCardID(){
    // Method implementation goes here.
  }

  private static void displayCardDetails(){
    // Method implementation goes here.
  }

}

6.多分辨率图像API:

在Java SE 9 中,Oracle Corp. 引入了一个新的多分辨率图像 API。此 API 中的重要接口是 MultiResolutionImage 。它在Java.awt.image 包中可用。 MultiResolutionImage 封装了一组具有不同高度和宽度的图像,并允许我们根据我们的要求查询它们。

7、 Java(9)平台模块系统:

模块系统是Java 9 最大的变化之一。 Oracle Corp. 在 Jigsaw Project 中引入了以下特性:

  • 模块化 JDK
  • 模块化Java源代码
  • 模块化运行时映像
  • 封装Java内部 API
  • Java平台模块系统

在Java SE 9 版本之前,我们使用 Monolithic Jars 来开发基于 Java 的应用程序。这种架构有很多限制和缺点。为了避免所有这些缺点, Java SE 9 附带了模块系统。

8. Process API 的改进:

Java SE 9 对 Process API 进行了一些改进。他们添加了几个新的类和方法来简化操作系统进程的控制和管理。
Process API 中的两个新接口:

  • Java.lang.ProcessHandle
  • Java.lang.ProcessHandle.Info

9. HTTP/2 客户端

Java 9 出现了一种执行 HTTP 调用的新方式。由于现有或 Legacy HTTP Client API 存在许多问题(例如支持 HTTP/1.1 协议,不支持 HTTP/2 协议和 WebSocket,只能在阻塞模式下工作,并且存在很多性能问题.),他们正在用新的 HTTP 客户端替换这个 HttpURLConnection API。他们将在“Java.net.http”包下引入新的 HTTP 2 Client API。它同时支持 HTTP/1.1 和 HTTP/2 协议。它支持同步(阻塞模式)和异步模式。它支持使用 WebSocket API 的异步模式。

HttpClient client = HttpClient.newHttpClient();

HttpRequest req =
   HttpRequest.newBuilder(URI.create("http://www.google.com"))
              .header("User-Agent", "Java")
              .GET()
              .build();


HttpResponse resp = client.send(req, HttpResponse.BodyHandler.asString());

10. 其他Java 9 功能:

  • GC(垃圾收集器)改进
  • Stack-Walking API
  • 过滤传入的序列化数据
  • 弃用 Applet API
  • 指示字符串连接
  • 增强的方法句柄
  • Java平台日志记录 API 和服务
  • 紧凑的字符串
  • Nashorn 解析器 API
  • Javadoc 搜索

___________________________________________________________________________________________________________________
PS: Java SE 9 已终止支持。 Java SE 9 的用户应该切换到Java SE 10 或更高版本。了解有关Java的更多信息的有用链接:
1. 维基百科
2. Oracle 文档