(1)备份()
java.util.List、java.util.Map 和java.util.Set 每个都有一个新的静态方法copyOf(Collection)。
它返回给定集合的不可修改的副本:
@Test(expected = UnsupportedOperationException.class)
public void whenModifyCopyOfList_thenThrowsException() {
List<Integer> copyList = List.copyOf(someIntList);
copyList.add(4);
}
任何修改此类集合的尝试都将导致java.lang.UnsupportedOperationException运行时异常。
(2)toUnmodifiable*()
java.util.stream.Collectors 获取额外的方法来将Stream 收集到不可修改的List、Map 或Set中:
@Test(expected = UnsupportedOperationException.class)
public void whenModifyToUnmodifiableList_thenThrowsException() {
List<Integer> evenList = someIntList.stream()
.filter(i -> i % 2 == 0)
.collect(Collectors.toUnmodifiableList());
evenList.add(4);
}
任何修改此类集合的尝试都将导致java.lang.UnsupportedOperationException运行时异常。
java.util.Optional、java.util.OptionalDouble、java.util.OptionalInt和java.util.OptionalLong每个都有一个新方法orElseThrow(),它不接受任何参数,如果没有值则抛出NoSuchElementException :
@Test
public void whenListContainsInteger_OrElseThrowReturnsInteger() {
Integer firstEven = someIntList.stream()
.filter(i -> i % 2 == 0)
.findFirst()
.orElseThrow();
is(firstEven).equals(Integer.valueOf(2));
}
它是同义词,现在是现有get()方法的首选替代方法。
JVM 现在知道在 Docker 容器中运行, 并将提取特定于容器的配置,而不是查询操作系统本身——它适用于已分配给容器的 CPU 数量和总内存等数据。
但是,此支持仅适用于基于 Linux 的平台。默认情况下启用此新支持,可以在命令行中使用 JVM 选项将其禁用:
-XX:-UseContainerSupport
此外,此更改添加了一个 JVM 选项,该选项提供了指定 JVM 将使用的 CPU 数量的能力:
-XX:ActiveProcessorCount=count
此外,还添加了三个新的 JVM 选项,以允许 Docker 容器用户对将用于 Java 堆的系统内存量进行更细粒度的控制:
-XX:InitialRAMPercentage
-XX:MaxRAMPercentage
-XX:MinRAMPercentage
cacerts 密钥库最初是空的,旨在包含一组根证书,可用于建立对各种安全协议使用的证书链的信任。
因此,关键安全组件(如 TLS)在 OpenJDK 构建下默认不工作。
在 Java 10 中,Oracle 开源了 Oracle Java SE Root CA 程序中的根证书,以使 OpenJDK 构建对开发人员更具吸引力,并减少这些构建与 Oracle JDK 构建之间的差异。
(1)命令行选项和工具
工具javah 已从 Java 10 中删除,Java 10 生成了实现本机方法所需的 C 头文件和源文件——现在,可以使用javac -h 代替。
policytool 是用于策略文件创建和管理的基于 UI 的工具。现在已将其删除。用户可以使用简单的文本编辑器来执行此操作。
删除了 java -Xprof选项。该选项用于分析正在运行的程序并将分析数据发送到标准输出。用户现在应该改用jmap 工具。
(2)蜜蜂
已弃用的 java.security.acl 包已标记为 forRemoval=true 并且可能会在 Java SE 的未来版本中被删除。它已被java.security.Policy 和相关类取代。
同样,java.security.{Certificate,Identity,IdentityScope,Signer} API 被标记为forRemoval=true。
从 Java 10 开始,Oracle 已转向基于时间的 Java 发布。这具有以下含义:
每六个月发布一个新的 Java。2018 年 3 月发布的是 JDK 10,2018 年 9 月发布的是 JDK 11,依此类推。这些称为功能发布,预计至少包含一个或两个重要功能
对功能发布的支持将仅持续六个月,即直到下一个功能发布
长期支持版本将标记为 LTS。对此类发布的支持将持续三年
Java 11 将是一个 LTS 版本
java -version 现在将包含 GA 日期,从而更容易识别版本的年龄:
$ java -version
openjdk version "10" 2018-03-20
OpenJDK Runtime Environment 18.3 (build 10+46)
OpenJDK 64-Bit Server VM 18.3 (build 10+46, mixed mode)
以上就是关于“一文读懂JDK10新特性”的介绍,大家如果想了解更多相关知识,可以关注一下本站的Java极悦在线学习,里面的课程内容从入门到精通,细致全面,很适合没有基础的小伙伴学习,希望对大家能够有所帮助。
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习