从 1995 年开始算起,Java 已经走过了20多个年头,也发布了十余个大版本,了解一下 Java 的不同版本的特性,以便在日常的开发中更好的使用。
在《Java语言的身世》(没看的小伙伴可以去看看)中,我们已经知道 Java 是 1995 年宣布诞生的,但这个版本的 Java 更像是一个 Beta 版本,也即是测试版本。
软件开发中的版本号修饰词小知识:
alpha:内部版本
beta:测试版本
rc:正式版本
lts:长期稳定版
1996 年 Sun 公司才发布第一个正式的 Java 版本(rc版本),JDK1.0,开发版本代号 Oak(橡树),以 Oak 命名版本代号,想必也是为了纪念 詹姆斯·高斯林 办公室外的那棵橡树吧。当时互联网也才刚刚开始,JDK 虽然只有几兆(现在 Java 已达 100 多兆),但是受限于网速下载也很慢。在这种情况下,当时仍有多家操作系统厂商使用 Java,也有上万个网页使用 Java 技术制作,这足以说明 Java 在当时的流行性。
1997 年 Sun 公司又发布 JDK1.1(可以看作是 Java1),并召开了 JavaOne 会议,据说当时参会者人数达一万人,创当时同类会议之最,下面是这个版本新增的功能。
1998 年 Sun 公司发布 J2SE1.2(不在用 jdk 命名版本了),版本代号 Playground(这里翻译过来不是操场,而是竞技场,暗示 Java 要大干一场),次年(1999),Sun 公司一口气发布了三个版本的 Java,标准版(J2SE,后来改名为 JavaSE)、企业版(J2EE,后来改名为 JavaEE)、微型版(J2ME,后来改名为 JavaME),主要增加的新功能如下:
2000 年 Sun 公司发布 J2SE1.3(可以看作是 Java3),版本代号 Kestrel(美洲红隼,一种鸟),主要改变如下:
Java语言的相关组织和规范(其他语言也有类似的组织):
JCP:(Java Community Process)由世界上各个为 Java 发展操心的人士组成的社区,参与定义 Java 新特性和新版本制定标准的组织(作为唯一的中国代表阿里巴巴就是 JCP 的执行委员之一,阿里的 Java,腾讯的 C++ 都不是吹的)。
JSR:(Java Specification Requests)Java 语言规范请求文档,你可以对 Java 提出新的要求,然后 Java 相关的组织投票决定是否通过,通过后就将这个要求写入 JSR 中,并且最终给出一个开源的实现。
JEP:(Java Enhancement Proposal),Java 增强建议,收集大家对于 JDK 的建议,起草增强 Java 哪些功能的方案,为 JDK 新版本发布及相关工作指定路线。
2002 年 Sun 公司发布了在 JCP(Java Community Process) 的标准下开发的J2SE1.4(可以看作是 Java4),版本代号 Merlin(灰背隼,也是一种鸟),这个版本可以说是 Java 走向成熟的标志,主要的新特性如下:
2004 年 Sun 公司发布 J2SE5(没错,Sun 公司又改名字了),版本代号 Tiger,这个版本的 Java 语言新功能如下:
2006 年 Sun 公司发布 JavaSE6(不要抱怨又改名字了,因为马上就要见不到 Sun 公司了),版本代号 Mustang(野马),也是个经典版本,直到现在也有很多人在写(讲个笑话,现在 Java8 的使用者,绝大多数都是用着 Java8 写着 Java 6 的代码,其实我也是,逃~),这个版本的 Java 主 要改变如下:
这个版本的 Java 更多是对之前版本功能的优化,增强了用户的可用性和修复了一些漏洞,所以直到现在也有很多项目在使用(给项目用的Java版本升个级可能会有意想不到的的问题,所以保持原样就好了,运维大哥要溜了溜了~)。
20011 年,这时候 Oracle 已经把 Sun 公司收购了(2009 年后 Java 就是 Oracle 的人了),Oracle 发布 JavaSE7,新增的功能如下:
1、放宽 switch 的使用,我们可以在 switch 中使用字符串啦,而在这个版本之前,只能使用字符和数字。
2、try-resource-with 语句,帮助我们自动化管理资源,如打开文件,对文件操作结束后,JVM 可以自动帮我们关闭文件资源,当然前提是你要用 try-resource-with 语句。
3、加入了类型推断功能,比如你之前版本使用泛型类型时这样写 ArrayList<User> userList= new ArrayList<User>();
,这个版本只需要这样写 ArrayList<User> userList= new ArrayList<>();
,也即是后面一个尖括号内的类型,JVM 帮我们自动类型判断补全了。
4、简化了可变参数的使用。
5、支持二进制整数,在硬件开发中,二进制数更常用,方便人查看。
6、支持带下划线的数值,如 int a = 100000000;
,0 太多不便于人阅读,这个版本支持这样写 int a = 100_000_000
,这样就对数值一目了然了吧。
7、异常处理支持多个 catch 语句。
8、NIO 库的一些改进,增加多重文件的支持、文件原始数据和符号链接。
9、其他(更多是进一步的优化)。。。
2014 年,JavaSE8 发布,这个版本包含了之前本想在 JavaSE7 加入的,但由于时间仓促延迟发布的一些功能。
1、Lambda 表达式,简化代码(这个后面会专门写一篇文章介绍)。
2、注解功能的增强。
3、新的时间和日期 API,在这之前 Java 的时间和日期库被投票为最难用的 API 之一,所以这个版本就改进了。
4、JavaFX,一种用在桌面开发领域的技术(也是和其他公司竞争,这个让我们拭目以待吧)。
5、静态链接 JNI 程序库(这个做安卓开发的同学应该熟悉)。
6、其他。。。
2017 年,Oracle 发布 JavaSE9(这个版本的功能早在 2011 年的 JavaOne 大会中就讨论了),这个版本目前也还在更新中,一些新功能就简要介绍一下。
1、模块化(这点也是向其他语言学习的,如 JavaScript)。
2、Java Shell(这点也是向其他语言学习的,如 Python),在这之前总有人说 Java 太麻烦,写个 Hello Word 都要新建个类,有时候测试个几行的代码都不方便,Java Shell 推出后,Java 开发者不用眼馋其他语言的 Shell 了,你可以向下面图中这样写 Java 的 Hello Word 了(我的电脑上装了 Java 6、7、8、9、10 ,准备集齐七个版本召唤 Java 神龙,txtx~)。
3、即时编译功能的增强。
4、XML Catalogs ,XML 文件自动校验。
5、一些还在开发路上的功能。。。
JavaShell.png
至于 Java10 和 Java11 就不在这里说了,毕竟 Java9 还没开发完呢(偷个懒~)。
从上面 Java 的版本发展,可以看到 Java 逐渐成长的过程,Java 也在向其他语言学习。直到现在 Java 也仍然具有很强的生命力,那些鼓吹 Java 已死的人肯定是有别有用心(这里就不点名某些培训机构了),还有一些担心未来 Java 会收费的,要知道 JDK 可不止 Oracle 一家的,开源的 OpenJDK (Oracle 的 JDK 开发者都亲口说 OpenJDK 的代码基本上就是 Oracle JDK 的源码)和其他厂家免费的 JDK 都可以用,所以这点大可不必担心,Java 的未来还是一片光明的。
套用 《满城尽是黄金甲》 中周润发对周杰伦说的一句话,我 Java 给你的才是你的,我 Java 不给你,你不能抢。