Java 9 揭秘(8. JDK 9重大改变)

发布时间:2017-7-9 7:18:13编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"Java 9 揭秘(8. JDK 9重大改变) ",主要涉及到Java 9 揭秘(8. JDK 9重大改变) 方面的内容,对于Java 9 揭秘(8. JDK 9重大改变) 感兴趣的同学可以参考一下。

Tips
做一个终身学习的人。

Java 9

在本章,主要介绍以下内容:

  • 新的JDK版本控制方案是什么
  • 如何使用Runtime.Version类解析JDK版本字符串
  • JDK JRE 9的新目录布局是什么
  • JDK 9中的批注的标准覆盖机制如何工作的
  • 在JDK 9中使用扩展机制的变化
  • JDK 9中的类加载器如何工作以及模块的加载方式
  • 资源如何封装在JDK 9中的模块中
  • 如何使用ModuleClassClassLoader类中的资源查找方法访问模块中的资源
  • jrt URL方案是什么,以及如何使用它来访问运行时映像中的资源
  • 如何访问JDK 9中的JDK内部API以及JDK 9中已删除的JDK API列表
  • JDK 9中如何使用--patch-module命令行选项替换模块中的类和资源

一. 新的JDK版本控制方案

在JDK 9之前,JDK版本控制方案对开发人员来说并不直观,程序解析并不容易。 看看这两个JDK版本,你不能说出他们之间的微妙差异。 很难回答一个简单的问题:哪个版本包含最新的安全修复程序,JDK 7 Update 55或JDK 7 Update 60? 答案不是很明显的,你可能已经猜到了JDK 7 Update 60。这两个版本都包含相同的安全修复程序。 JDK 8 Update 66,1.8.0_66和JDK 8u66版本有什么区别? 它们代表相同的版本。 在了解版本字符串中包含的详细信息之前,有必要详细了解版本控制方案。 JDK 9试图规范JDK版本控制方案,因此人们很容易理解,易于程序解析,并遵循行业标准版本控制方案。

JDK 9包含一个名为Runtime.Version的静态嵌套类,它表示Java SE平台实现的版本字符串。 它可以用于表示,解析,验证和比较版本字符串。

版本字符串按顺序由以下四个元素组成。 只有第一个是强制性的:

  • 版本号
  • 预发行信息
  • 构建信息
  • 附加信息

以下正则表达式定义版本字符串的格式:

$vnum(-$pre)?(\+($build)?(-$opt)?)?

一个简短版本的字符串由一个版本号码组成,可选地包含预发布信息:

$vnum(-$pre)?

可以使用只包含主版本号“9”的版本字符串。“9.0.1-ea + 154-20170130.07.36am”,包含版本字符串的所有部分。

1. 版本号

版本号是按句点分隔的元素序列。 它可以是任意长度。 其格式如下:

^[1-9][0-9]*(((\.0)*\.[1-9][0-9]*)*)*$

版本号可以由一到四个元素组成,如下所示:

$major.$minor.$security(.$addtionalInfo)

$major元素代表JDK版本的主要版本。 主要版本是递增的,其中包含重要的新功能。 例如,JDK 8的主要版本为8,对于JDK 9为9。当主版本号增加时,版本号中的所有其他部分都将被删除。 例如,如果版本号为9.2.2.1,则主版本号从9增加到10时,新版本号将为10。

$minor元素代表JDK版本的次要版本。 增加一个小的更新版本,例如错误修复,新的垃圾收集器,新的JDK特定的API等。

$security元素表示JDK版本的安全级别更新。 它会增加一个安全更新。 当次要版本号增加时,该元素不会重置。 给定$major$security更高值总是表示更安全的版本。 例如,JDK版本9.1.7与JDK版本9.5.7一样安全,因为两个版本的安全级别是相同的,也就是7。另一个例子,JDK版本9.2.2比9.2.1更安全,因为对于相同的主要版本9,前者的安全级别为2大于后者的安全级别1。

以下规则适用于版本号:

  • 所有元素必须是非负整数。
  • 前三个要素分别被视为主要版本,次要版本和安全级别;其余的(如果存在)被视为附加信息,例如指示补丁发布的数字。
  • 只有主要版本元素是强制性的。
  • 版本号的元素不能包含前导零。 例如,JDK 9的主要版本是9,而不是09。
  • 后面的元素不能为零。 也就是说,版本号不能为9.0.0。 它可以是9,9.2或9.0.x,其中x是正整数。

2. 预发行信息

版本字符串中的$pre元素是预发行标识符,例如早期访问版本的ea,预发行版快照,以及开发人员内部构建版本。 这是可选的。 如果它存在,它以前缀为连字符( - ),并且必须是与正则表达式([a-zA-Z0-9] +)匹配的字母数字字符串)。 以下版本字符串包含9作为版本号,ea作为预发布信息。

9-ea

3. 构建信息

版本字符串中的$build元素是为每个提升的构建增加的构建号。 这是可选的。当版本号的任何部分增加时,它将重置为1。 如果它存在,它加上加号(+),并且必须匹配正则表达式(0 | [1-9] [0-9] *)。 以下版本的字符串包含154作为版本号。

9-EA+154

4. 附加信息

版本字符串中的$opt元素包含其他构建信息,例如内部构建的日期和时间。这是可选的。它是字母和数字,可以包含连字符和句点。 如果它存在,它以前缀为连字符(-),并且必须与正则表达式([-a-zA-Z0-9 \。] +)匹配。 如果$build不存在,则需要在$opt值前加一个加号,后跟连字符(+ -)来指定$opt的值。 例如,在9-ea+132-2016-08-23中,$build为132,$opt为2016-08-23; 在9+-123中,$pre$build缺失,$opt为123。以下版本字符串在其附加信息元素中加入发布的日期和时间:

9-EA+154-20170130.07.36am

5. 解析旧版和新版字符串

JDK版本或者是受限更新版本,其中包括新功能和非安全修补程序,或重要补丁更新,其中仅包括针对安全漏洞的修补程序。 版本字符串包括版本号,包括更新号和构建号。 限制更新版本的编号为20的倍数。重要补丁更新使用奇数,通过将五加倍加到先前的限制更新中,并在需要时添加一个以保持计算结果为奇数。 一个例子是1.8.0_31-b13,它是JDK主版本8的更新31。 它的内部版本号是13。注意,在JDK 9之前,版本字符串始终以1开头。

Tips
解析版本字符串以获取JDK版本的主版本的现有代码可能会在JDK 9中失败,具体取决于其使用的逻辑。 例如,如果逻辑通过跳过第一个元素(以前为1)来查找第二个元素的主版本,逻辑将失败。 例如,如果它从1.8.0返回8,那么它将从9.0.1返回0,在那里你会期望9。

6. 系统属性的版本更改

在JDK 9中,包含JDK版本字符串的系统属性返回的值已更改。 下面表格是这些系统属性及其格式的列表。 $vstr$vnum$pre分别指版本字符串,版本号和预发布信息。


上一篇:HDU 3342 -- Legal or Not【裸拓扑排序 &&水题 && 邻接表实现】
下一篇:xshell sftp可用命令,sftp: cannot open d: to write![解决]

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款