Java 10 新特性有哪些?有哪些实用功能值得学?

文章导读
Previous Quiz Next Java 10 是 Java 发布节奏中的一个主要版本,于 2018 年 3 月 20 日发布。从 Java 10 开始,Oracle 将 Java 的发布节奏改为新的模式,即 6 个月的发布周期和针对 Oracle Java SE 产
📋 目录
  1. Oracle JDK 与 OpenJDK
  2. Java 10 新特性
  3. Java 10 - 新 APIs & Options
  4. Optional.orElseThrow() 方法
  5. 创建不可变集合的 APIs
  6. 禁用 JRE 最后使用跟踪
  7. Hashed Password
  8. javadoc 支持多个样式表
  9. javadoc 支持覆盖方法
  10. javadoc 对 Summary 的支持
A A

Java 10 - 新特性 (APIs & Options)


Previous
Quiz
Next

Java 10 是 Java 发布节奏中的一个主要版本,于 2018 年 3 月 20 日发布。从 Java 10 开始,Oracle 将 Java 的发布节奏改为新的模式,即 6 个月的发布周期和针对 Oracle Java SE 产品的 LTS 模型。LTS 模型代表长期支持模型。

从 Java 10 开始,Oracle 每 6 个月发布一个新版本的 Java,每个版本包含一到两个主要特性。Oracle 采用发布列车概念。每个发布列车计划为 6 个月。在此时间内开发的特性将在该版本中发布,否则这些特性将被移至下一个发布列车。

Oracle JDK 与 OpenJDK

大多数 Oracle JDK 二进制文件是专有的,由 Oracle 授权并具有多种再分发限制。而 OpenJDK 则更受开发者社区欢迎。从 Java 10 开始,Oracle 决定将 OpenJDK 作为主要 JDK 以促进基于社区的 Java 开发。Oracle 将继续生产自己的 JDK,但每 3 年发布一次,并将其称为 LTS 版本。因此,OpenJDK 二进制文件将每 6 个月发布一次。

OpenJDK 对云和 container 友好,因为它可以作为 container 的一部分自由分发。因此,Oracle 推广 OpenJDK 的举措使 Java 对云或 container 开发和部署更加友好。

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

Java 10 新特性

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

  • JEP 286 − 局部变量类型推断

  • JEP 322 − 基于时间的发布版本控制

  • JEP 304 − Garbage-Collector Interface

  • JEP 307 − G1 的并行 Full GC

  • JEP 316 − 在替代内存设备上进行堆分配

  • JEP 296 − 将 JDK Forest 整合到一个单一仓库

  • JEP 310 − Application Class-Data Sharing

  • JEP 314 − 额外的 Unicode 语言标签扩展

  • JEP 319 − Root Certificates

  • JEP 317 − 实验性的基于 Java 的 JIT Compiler

  • JEP 312 − Thread-Local Handshakes

  • JEP 313 − 移除 Native-Header 生成工具

Java 10 通过添加新方法和选项增强了 70 多个 APIs,并移除了已弃用的 APIs 和选项。我们将在后续章节中查看这些变化。

Java 10 - 新 APIs & Options

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

Optional.orElseThrow() 方法

java.util.Optional 类中新增了 orElseThrow() 方法,它现在是 get() 方法的首选替代方案。

创建不可变集合的 APIs

List、Set 和 Map 接口中新增了 copyOf() 方法,可以从现有集合创建新的集合实例。Collector 类新增了 toUnmodifiableList()、toUnmodifiableSet() 和 toUnmodifiableMap() 方法,用于将流中的元素收集到不可变集合中。

禁用 JRE 最后使用跟踪

引入了一个新标志 jdk.disableLastUsageTracking,用于禁用运行中 VM 的 JRE 最后使用跟踪。

Hashed Password

jmxremote.password 文件中的明文密码现在由 JMX agent 用其 SHA3-512 哈希值覆盖。

javadoc 支持多个样式表

javadoc 命令新增了一个选项 --add-stylesheet。此选项支持在生成的文档中使用多个样式表。

javadoc 支持覆盖方法

javadoc 命令新增了一个选项 --overridden-methods=value。许多类会覆盖继承的方法但不更改规范。--overridden-methods=value 选项允许将这些方法与其他继承方法分组,而不是单独再次记录它们。

javadoc 对 Summary 的支持

新增了一个内联标签 {@summary ...},用于指定用作 API 描述摘要的文本。默认情况下,API 描述的摘要是从第一句推断出来的。

示例

以下程序展示了 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 {
         // 获取一个不可修改的 list
         List<Integer> copyOfIds = List.copyOf(ids);
         copyOfIds.add(6);	
      } catch(UnsupportedOperationException e){
         System.out.println("Collection is not modifiable.");
      }
      try{
         // 获取一个不可修改的 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.");
      }
   }
}

输出

它将打印以下输出。

Collection is not modifiable.
Collection is not modifiable.

有用链接

  • Deprecation Features Options
  • Removal Features Options