Java 简明教程

Java 10 - New Features (APIs & Options)

Java 10 是 Java 发布节奏中的一个主要版本,它于 2018 年 3 月 10 日发布。对于 Java 10,Oracle 已将 java 发布节奏更改为一种新模式,为 Oracle Java SE 产品制定了 6 个月的发布节奏和 LTS 模式。LTS 模式代表长期支持模式。

从 Java 10 开始,Oracle 每 6 个月发布一个新版本的 Java,每个版本包含一个或两个主要特性。Oracle 使用发布周期概念。每个发布周期安排 6 个月。在这个时间范围内开发的特性都会在该版本中发布,否则该特性将移至下一个发布周期。

Oracle JDK vs OpenJDK

大多数 Oracle JDK 二进制文件是专有的,由 Oracle 许可,并且对再分发有多种限制。而 OpenJDK 更适合开发人员社区。从 Java 10 开始,Oracle 决定将 OpenJDK 作为主要的 JDK 来促进基于社区的 Java 开发。Oracle 将继续生成自己的 JDK,但将在 3 年后发布它们,并将其称为 LTS 版本。因此,OpenJDK 二进制文件将在每六个月后发布。

OpenJDK 兼容云和容器,因为它可以作为容器的一部分免费分发。因此,Oracle 推广 OpenJDK 的举措使 Java 更适合于云或容器的开发和部署。

Java 9 和 Java 10 是非 LTS 版本。Java 11 版本是 LTS 版本。

Java 10 New Features

以下是在 Java 10 中引入的主要新特性。

  1. JEP 286Local Variable Type Inference

  2. JEP 322Time-Based Release Versioning

  3. JEP 304 − 垃圾收集器接口

  4. JEP 307 − G1 的并行全 GC

  5. JEP 316Heap Allocation on Alternative Memory Devices

  6. JEP 296Consolidate the JDK Forest into a Single Repository

  7. JEP 310Application Class-Data Sharing

  8. JEP 314Additional Unicode Language-Tag Extensions

  9. JEP 319Root Certificates

  10. JEP 317 − 基于 Java 的实验性 JIT 编译器

  11. JEP 312Thread-Local Handshakes

  12. JEP 313 − 移除了本机头生成工具

在 Java 10 中,对 70 多个 API 进行增强,添加了新方法和选项,并移除了已弃用的 API 和选项。我们将在下一章中了解这些更改。

Java 10 - New APIs & Options

JDK 10 发布已为 Java 库添加了 70 多个新 API 和选项。以下是一些引入的重要增强功能。

Optional.orElseThrow() Method

一个新方法 orElseThrow() 在 java.util.Optional 类中提供,它现在是 get() 方法的首选替代方法。

APIs to create Unmodifiable Collections

在 List、Set 和 Map 接口中有新的 copyOf() 方法,它可从现有集合中创建新的集合实例。Collector 类拥有方法 toUnmodifiableList(), toUnmodifiableSet(), and toUnmodifiableMap(),用于将流的元素弄成不可修改的集合。

Disable JRE Last Usage Tracking

引入了新标志 jdk.disableLastUsageTracking,它可禁用针对正在运行的 VM 的 JRE 上次使用情况跟踪。

Hashed Password

JMX 代理现在已使用 SHA3-512 哈希值覆盖 jmxremote.password 文件中可用的明文密码。

javadoc Support for Multiple Stylesheets

新的选项以 --add-stylesheet 的形式提供给 javadoc 命令。此选项支持在生成的文档中使用多个样式表。

javadoc Support for Overridding methods

新的选项以 --overridden-methods=value 的形式提供给 javadoc 命令。由于许多类均会覆盖继承的方法但不会更改规范,因此 --overridden-methods=value 选项允许将这些方法与其他继承方法组合到一起,而不是单独再次描述它们。

javadoc Support for Summary

新的内联标签 {@summary …​} 提供给指定要作为 API 描述摘要的文本。默认情况下,API 描述的摘要是从第一句话推断出来的。

Example

以下程序展示了 JAVA 10 中一些新 API 的使用。

import java.util.List;
import java.util.stream.Collectors;

public class Tester {
   public static void main(String[] args) {
      var ids = List.of(1, 2, 3, 4, 5);
      try {
         // get an unmodifiable list
         List<Integer> copyOfIds = List.copyOf(ids);
         copyOfIds.add(6);
      } catch(UnsupportedOperationException e){
         System.out.println("Collection is not modifiable.");
      }
      try{
         // get an unmodifiable list
         List<Integer> evenNumbers = ids.stream()
            .filter(i -> i % 2 == 0)
            .collect(Collectors.toUnmodifiableList());;
         evenNumbers.add(6);
      }catch(UnsupportedOperationException e){
         System.out.println("Collection is not modifiable.");
      }
   }
}

Output

它将打印以下输出。

Collection is not modifiable.
Collection is not modifiable.

Useful Links