jdk 9.0就是jdk1.9吗

在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