在现有的版本编码格式使用了两年之后,从Java 9开始,Java版本方案将根据业内软件版本编码的最佳实践进行修改。使用或解析Java版本字符串的应用程序开发人员要注意了,因为这种变化可以会影响他们的应用程序。

正如JEP 223所阐述的那样,当前的版本方案会跳过某些版本号,而且安全补丁版本和更新版本混在一起。社区认为,该方案产生的版本号含义模糊、不直观。为了解决这个问题,Oracle引入了一种使用语义版本编码的新版本方案,就是说,Java版本字符串将依次包含如下三个部分:主版本号、小(维护)版本号和安全版本号。长版本格式还将包含像构建版本号和可用性这样的信息。

主版本号即我们通常所理解的Java版本,比如,Java 9的主版本是9。因此,按照Java的新版本发布计划,主版本的变化只会两年或三年发生一次。主版本的变化可能会包含破坏性变更,但这些变更至少会提前两个主版本通知。

小版本号将包含非重要Bug修复、所支持API的维护发布以及增加内部组件,如新的服务提供程序、新的垃圾收集器,或者支持新的架构。同更新补丁集一样,小版本有望每季度发布一次。

最后,安全版本将包含重要Bug修复。这些版本可能像重要补丁更新那样根据计划按季度发布,或者像安全警报那样按需发布。

关于这点,有个值得注意的结论是,在认识到社区将当前版本号中的第二个数字作为事实上的主版本号,而开头的1被理解为没有意义之后,Oracle去掉了版本号开头的“1”。这一变化可能会导致目前解析版本字符串而有假定版本号开头为1或点的应用程序出现问题。例如,

System.getProperty("java.version").indexof('.');

上述获取主版本的代码会返回-1(尾部的0会从版本字符串中去掉,因此,9.0.0会简单地表示成9)。

新方案将成为Java版本字符串的第三个标准。第一个始于Java 1.3。该方案相当简单,使用第二个数字作为实际的主版本,第三个数字表明是一个安全修复(奇数)还是更新(偶数)。这种编码系统存在缺陷,有时候会迫使一些版本重新编码。

为了解决这个问题,Oracle引入了当前的版本系统。在当前的方案下,安全补丁仍然使用奇数,更新仍然使用偶数,虽然并不连续。更新总是20的倍 数,重要补丁更新的版本通过在最新的维护更新上增加5的倍数(为了保证版本号为奇数,必要的时候要加1)计算得出。这样,如果维护版本号是20,那么按照 计划,后续安全版本将是25、31和35。版本号之间留出的数字将用于安全警报补丁的发布,这样就不需要重新编码其他计划好的版本号。

新的版本编码系统旨在采用一种能够区分更新和安全补丁的方式,而且是一种识别要简单许多的方式。

====================================分割线================================
文章转载自 开源中国社区[http://www.oschina.net]

Java 9 将采用新的版本字符串格式相关推荐

  1. java字符插入_java在原字符中插入新字符或字符串实例

    插入字符代码: public class Test { /**在原字符中插入新字符**/ public static void main(String[] args){ StringBuffer sb ...

  2. Java历史、现状和各版本技术更迭总结

    写在前面: 此文总结于 2016年12月21日10:24:39,主要用于了解 Java 语言的发展,以及 Java 语言的现状.个人观点:未来数十年 Java 依然会占有大部分市场,主要应用方向还是 ...

  3. Java 11中的新功能和API详解系列1

    Java 11中的新功能和API详解系列1 2018.9.27 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载. JDK 11在语言语法方面有一个小改动,增加了相当数量的新API,以及 ...

  4. 【Java SE】JDK 8 以往版本

    [Java SE]SE语法备忘(2) https://mp.csdn.net/postedit/90038581 JDK 8 以往版本 -------------------------------- ...

  5. java 8 新功能详解_Java 8和Java 14之间的新功能

    java 8 新功能详解 从版本9开始,Java每6个月就有一次新功能,因此很难跟踪这些新更改. 互联网上的大多数信息都描述了最近2个Java版本之间的变化. 但是,如果您的情况与我相似,则说明您使用 ...

  6. Java 8和Java 14之间的新功能

    从版本9开始,Java每6个月就会有新功能,因此很难跟踪这些新更改. 互联网上的大多数信息都描述了最近两个Java版本之间的变化. 但是,如果您的情况与我相似,则说明您使用的不是Java的最新版本,而 ...

  7. java的发展(8-17新特性整理)

    java java的诞生与历史: 简介:Java是一门面向对象的编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征. ...

  8. java jdk12_JDK 12:Java 12中的新功能

    java jdk12 基于Java SE(标准版)12的Java开发套件12的生产版本现已发布. Oracle可以为Linux,Windows和MacOS提供JDK 12构建. [ Java JDK ...

  9. json 解析 转java对象数组对象数组对象_json字符串转java对象数组

    需要引入json-lib-2.2-jdk15.jar和ezmorph-1.0.6.jar包 String itemStar = request.getParameter("itemStar& ...

最新文章

  1. Redis常用命令之操作String类型
  2. 刚刚,这几门保证就业的算法类课程,居然能免费听了!
  3. 动态规划--Leetcode746
  4. python虚拟环境安装的包在哪_如何使用virtualenv引导脚本在虚拟环境中安装python包?...
  5. Windows下安装ab
  6. 专刊文章 - Web UI框架引领J2EE新开发模式(代码生成器+手工merge半智能开发)
  7. html5有本地存储吗,HTML5的本地存储
  8. 初识 Vue(10)---(计算属性的 setter 和 getter)
  9. C++的STL标准库学习(queue)队列(第四篇)
  10. 韩顺平oracle教学笔记,韩顺平 - 玩转oracle教程笔记(转)
  11. 微信语音内容怎么录制,电脑如何内录
  12. 机器学习(4)——弱监督学习
  13. 【论文写作】使用overleaf撰写你的会议论文
  14. 异步爬取有道词典(入门js逆向)
  15. unittest使用详解
  16. require(‘inquirer‘)报错
  17. 180209 逆向-Frida-python on win多进程BUG(曲线救国)
  18. 吃遍深圳,FB到底 [zt]
  19. Linux查看CPU核数
  20. abap新语法(一)

热门文章

  1. 第九章 魔法方法、特性和迭代器
  2. 远控免杀专题9 --- Avet免杀
  3. mysql 插入中文 ERROR 1366 (HY000): Incorrect string value: '\xE7\x8E\x9E\x97' for column
  4. c语言数据转移,重温C语言(2)之数据
  5. linux 常用命令02--文件属性 以及软硬链接
  6. 【剑指offer】_14 不用加减乘除做加法
  7. 【第十六章】模板实参推断
  8. K8S+Docker理论与实践深度集成
  9. 【微信小程序】java最简单观察者模式
  10. 13结构型模式之桥接模式