Java 9 将采用新的版本字符串格式

在现有的版本编码格式使用了两年之后,从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]

时间: 2024-10-08 13:01:50

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

导出-java 将Excel07 转出03版本

问题描述 java 将Excel07 转出03版本 如题. 最近有个需求需要将500w的数据生成XLS文件,POI没有发现支持大数据导出.于是采用07版本,但是03 Excel版本打不开,需要将07转03.求高手. 或者帮忙提供一下03生成大数据的方案,谢谢! 解决方案 最好用VBA,毕竟是微软支持的. 解决方案二: 直接把文件生成csv格式,然后想用哪个版本excel就用哪个版本转换一下.

Java 8决定采用跟C#一样的Lambda句法

鉴于Java 7 SE(标准版)现已http://www.aliyun.com/zixun/aggregation/18782.html">正式发布,甲骨文和Java社区进程组织(JCP)的成员们已开始仔细考虑为这种编程语言的下一个版本Java SE 8添加什么功能特性.前段时间曝光将为Java 8提上议程的工作是:设计面向云计算的Java.近日又有提出了对Java 8语法上的改变:Java 8 将采用跟C#一样的Lambda句法. 相关618.html">负责人称:我们决

java按字节截取带有汉字的字符串的解法(推荐)_java

由于接口使用的oracle字段长度为固定字节数,然后传进来的字符串估计比数据库字段的总字节数要大,那么截取小于数据库字节数的字符串. 自己参考网上的例子,整了个递归调用就可以了,因为截取的字符字节长度必须小与数据库的字节长度,即如果最后一个字符为汉字,那么只能去掉往前截取. /** * 判断传进来的字符串,是否 * 大于指定的字节,如果大于递归调用 * 直到小于指定字节数 ,一定要指定字符编码,因为各个系统字符编码都不一样,字节数也不一样 * @param s * 原始字符串 * @param

在Ubuntu下安装lamp可以采用新立得软件包管理器来安装

以前在Ubuntu下安装lamp可以采用新立得软件包管理器来安装,方法如下: System–>Administration–>Synaptic Package Manager–>Edit–>Mark packages by Task–>LAMP Server–>OK 如果是中文节面则是系统-->系统管理-->新立得软件包管理器->编辑-->使用任务标记分组软件包-->LAMP Server (勾选)-->返回到上一个窗口,点击应用,这

程序猿的日常——Java基础之clone、序列化、字符串、数组

其实Java还有很多其他的基础知识,在日常工作技术撕逼中也是经常被讨论的问题. 深克隆与浅克隆 在Java中创建对象有两种方式: 一种是new操作符,它创建了一个新的对象,并把对应的各个字段初始化成默认值: 另一种是用clone方法,基于已有的对象创建一个新的对象,此时会根据原有的对象各个字段赋值给新的对象. 如果对象的字段都是基础类型,没有什么问题,但是如果字段是对象,那么其实clone的时候复制的仅仅是对象的引用而已. 上面就是深克隆与浅克隆的区别. 在我们日常的开发中,如果涉及到克隆,就需

java对象中属性值为空字符串的问题

问题描述 java对象中属性值为空字符串的问题 业务逻辑中需要将对象中为空字符串的属性转换为null,首先我想到是将对象转为一个数组, 然后遍历数组,将""转为 null ,不过这样应该不对,大家给个思路 解决方案 用 反射 获得所有字段的数组,然后遍历判断~~~~~~ 解决方案二: 你为什么还要遍历呢,你前台传过来的数据先处理再装对象,这样才对 解决方案三: 传到后台后,先判断 if("".eques(name)){ name=null; } object.set

java转码问题 把一串字符串转换为汉字

问题描述 java转码问题 把一串字符串转换为汉字 我现在知道这样一串字符串 也知道可能的汉字 但是我不知道具体对应哪个BAEAD49C4E75E17750FD4E7C1C78A377 FD160A490BAD7A1FA9D3E61D38EEC084526628C1E1A6923D B9D3BDC3C17A0CB0BAC62BC79EBD0299 2E8245A86C1D7F1F他们对应的汉字有可能为:0.25*20粒 国药准字H23023294青霉素类抗生素胶囊 应该是这样的,但是不知道有没有

java web应用中新起一个线程 在线程中怎么获取系统登录的数据

问题描述 java web应用中新起一个线程 在线程中怎么获取系统登录的数据 java web应用中新起一个线程 在线程中怎么获取系统登录的数据,系统登录用的是Spring Secrity 解决方案 可以使用缓存,自己写一个缓存类.或者使用Redis.

Google的新旧版本网站用户体验设计区别

据国外知名博客消息,Google 在针对某些用户测试其新版的网站风格,这里让我们先睹为快吧.从以下新旧版本的对比可以看出,Google的新版本网站更加注重操作性和可视性等用户体验方面. 1,Logo设计 Google的新Logo更大了,看起来更也比现在的老版本Logo更亮了,并且最大程度上减少了字母阴影效果,使得新版的Logo更有现代感了. 新Logo 当前Logo 2,首页 Google首页的搜索框更大了,两个搜索按钮也从默认的浏览器按钮样式,美化为新的CSS样式,使得其在不同的操作系统和不同