Java 教程

Java 控制语句

面向对象编程

Java 内置类

Java 文件处理

Java 错误和异常

Java 多线程

Java 同步

Java 网络编程

Java 集合

Java 接口

Java 数据结构

Java 集合算法

高级 Java

Java 其他

Java API 和框架

Java 类引用

Java 有用资源

Java 10 新特性(API 和选项)


Java 10 是 Java 版本发布节奏中的一个主要版本,它于 2018 年 3 月 10 日发布。通过 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 二进制文件将每六个月发布一次。

OpenJDK 兼容云和容器,因为它可以作为容器的一部分自由分发。因此,Oracle 推广 OpenJDK 的举动使 Java 更易于在云或容器中进行开发和部署。

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

Java 10 新特性

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

Java 10 增强了 70 多个 API,增加了新的方法和选项,并删除了已弃用的 API 和选项。我们将在接下来的章节中看到这些更改。

Java 10 - 新的 API 和选项

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

Optional.orElseThrow() 方法

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

创建不可修改集合的 API

List、Set 和 Map 接口中提供了一个新的方法 **copyOf()**,它可以从现有集合创建新的集合实例。Collector 类具有新的方法 **toUnmodifiableList()、toUnmodifiableSet() 和 toUnmodifiableMap()**,用于将流的元素放入不可修改的集合中。

禁用 JRE 最近使用跟踪

引入了新的标志 jdk.disableLastUsageTracking,该标志可禁用正在运行的 VM 的 JRE 最近使用跟踪。

哈希密码

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

javadoc 对多个样式表的支持

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

javadoc 对重写方法的支持

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

javadoc 对摘要的支持

提供了一个新的内联标签 {@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 {
         // 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.");
      }
   }
}

输出

它将打印以下输出。

Collection is not modifiable.
Collection is not modifiable.

有用链接

广告