从 1995 年开始算起,Java 已经走过了20多个年头,也发布了十余个大版本,了解一下 Java 的不同版本的特性,以便在日常的开发中更好的使用。
在《Java语言的身世》中,我们已经知道 Java 是 1995 年宣布诞生的,但这个版本的 Java 更像是一个 Beta 版本,也即是测试版本。
软件开发中的版本号修饰词小知识:
alpha:内部版本
beta:测试版本
rc:正式版本
lts:长期稳定版
复制代码
Java 0
1996 年 Sun 公司才发布第一个正式的 Java 版本(rc版本),JDK1.0,开发版本代号 Oak(橡树),以 Oak 命名版本代号,想必也是为了纪念 詹姆斯·高斯林 办公室外的那棵橡树吧。当时互联网也才刚刚开始,JDK 虽然只有几兆(现在 Java 已达 100 多兆),但是受限于网速下载也很慢。在这种情况下,当时仍有多家操作系统厂商使用 Java,也有上万个网页使用 Java 技术制作,这足以说明 Java 在当时的流行性。
Java 1
1997 年 Sun 公司又发布 JDK1.1(可以看作是 Java1),并召开了 JavaOne 会议,据说当时参会者人数达一万人,创当时同类会议之最,下面是这个版本新增的功能。
-
1、重新编写了用于桌面软件开发的 AWT 库(因为上个版本的 AWT 是 Java 最弱的组件,之前的库对于不同操作系统的界面抽象太简单,各个平台并不能兼容,这也不符合 Java 承诺的 “write once,run anywhere”)。
-
2、加入了内部类。
-
3、支持 JavaBeans ,使得 Java 对象可以被序列化成二进制,这样传输和保存就很方便啦!(JavaBeans,Java 豆,难道是受咖啡豆的启发?)
-
4、JDBC,让 Java 可以连数据库,不过还需要数据库开发自家的数据库驱动才可以。
-
5、RMI 远程方法调用,本地代码调用不在本地的方法,但需要遵守相关的通信协议。
-
6、支持不能在代码运行时修改的反射(这时的反射功能还很弱~,对反射不懂的小伙伴可以看这篇文章《Java进阶-反射》),如在代码运行时才读取文件中的配置信息,对后面代码的运行产生影响。
-
7、一家名叫 Symantec 的公司为 Java 开发编写的即时编译器(提前编译代码,增强代码真正执行时的性能,后来很多语言都是这样做的)。
-
8、支持国际化和Unicode编码,为 Java 的国际化打下基础。
Java 2
1998 年 Sun 公司发布 J2SE1.2(不在用 jdk 命名版本了),版本代号 Playground(这里翻译过来不是操场,而是竞技场,暗示 Java 要大干一场),次年(1999),Sun 公司一口气发布了三个版本的 Java,标准版(J2SE,后来改名为 JavaSE)、企业版(J2EE,后来改名为 JavaEE)、微型版(J2ME,后来改名为 JavaME),主要增加的新功能如下:
-
1、strictfp 关键字,可以保证在不同平台上的浮点数计算都是一样的。
-
2、Swing 组件,可以看作是 AWT 增强版的桌面软件开发库。
-
3、Sun 公司自己开发的即时编译器。
-
4、Java plug-in,Java 相关的插件,如支持 Applet 程序的浏览器插件。
-
5、Java IDL,为 Java 和其他语言互通打下基础。
-
6、Collections 框架(这个应该熟悉了)Java 中复杂的数据类型。
Java 3
2000 年 Sun 公司发布 J2SE1.3(可以看作是 Java3),版本代号 Kestrel(美洲红隼,一种鸟),主要改变如下:
-
1、Sun 公开的 HotSpot JVM,经典的 Java 虚拟机。JVM 绝对是 Java 语言最大的贡献,一些新型语言(如 Scala、Groovy、Kotlin 等,可以说它们都是 Java 这个大家族的一员)也是基于 JVM 平台的。
-
2、为遵循 CORVA 标准而修改了 RMI(大家都按标准来,以后也好学习和使用)。
-
3、**Java Platform Debugger Architecture,**用于 Java 调式的平台。
-
4、JavaSound API,编写音频处理的函数库。
-
5、Synthetic proxy,Java 代理的基础(对代理不懂的小伙伴可以看这篇文章《Java进阶-动态代理》)。
Java 4
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 走向成熟的标志,主要的新特性如下:
-
1、支持正则表达式。
-
2、assert 关键字,写测试代码用。
-
3、异常链,低级异常包装后再抛出,也方便开发人员调试。
-
4、支持网络 IPV6 标准。
-
5、NIO,非阻塞的 IO,优化 Java 的 IO 读取。
-
6、日志 API。
-
7、XML 解析器和 XSLT 转换器。
-
8、集成安全和加密扩展组件(JCE, JSSE, JAAS)。
-
9、Java Web Start 技术,直接从浏览器中启动 Java 平台(感觉有点吊~)。
-
10、Preference API,在 java.util.prefs 包下(软件设置中的 preference 选项,大家肯定都见过,中文翻译过来就是首选项,用户自定义的软件设置会被保存,这个 API 就是干这个事的)。
Java 5
2004 年 Sun 公司发布 J2SE5(没错,Sun 公司又改名字了),版本代号 Tiger,这个版本的 Java 语言新功能如下:
-
1、泛型。
-
2、Metadata,元数据,描述数据的数据。
-
3、自动装箱和拆箱,也就是基本数据类型(如 int)和它的包装类型(如 Integer)自动帮你转换(其实背后是相关的方法帮你做了转换工作)。
-
4、枚举。
-
5、可变参数,一个函数可以传入数量不固定的参数值。
-
6、增强版的 for 循环。
-
7、改进了 Java 的内存模型,提供了 java.util.concurrent 并发包。
Java 6
2006 年 Sun 公司发布 JavaSE6(不要抱怨又改名字了,因为马上就要见不到 Sun 公司了),版本代号 Mustang(野马),也是个经典版本,直到现在也有很多人在写(讲个笑话,现在 Java8 的使用者,绝大多数都是用着 Java8 写着 Java 6 的代码,其实我也是,逃~),这个版本的 Java 主 要改变如下:
-
1、提供动态语言支持。
-
2、提供编译 API,即 Java 程序可以调用 Java 编译器的 API。
-
3、Swing 库的一些改进。
-
4、JVM 的优化。
-
5、微型 HTTP 服务器 API 等。
这个版本的 Java 更多是对之前版本功能的优化,增强了用户的可用性和修复了一些漏洞,所以直到现在也有很多项目在使用(给项目用的Java版本升个级可能会有意想不到的的问题,所以保持原样就好了,运维大哥要溜了溜了~)。
Java 7
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、其他(更多是进一步的优化)。。。
Java 8
2014 年,JavaSE8 发布,这个版本包含了之前本想在 JavaSE7 加入的,但由于时间仓促延迟发布的一些功能。
1、Lambda 表达式,简化代码(这个后面会专门写一篇文章介绍)。
2、注解功能的增强。
3、新的时间和日期 API,在这之前 Java 的时间和日期库被投票为最难用的 API 之一,所以这个版本就改进了。
4、JavaFX,一种用在桌面开发领域的技术(也是和其他公司竞争,这个让我们拭目以待吧)。
5、静态链接 JNI 程序库(这个做安卓开发的同学应该熟悉)。
6、其他。。。
Java 9
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、一些还在开发路上的功能。。。
至于 Java10 和 Java11 就不在这里说了,毕竟 Java9 还没开发完呢(偷个懒~)。
从上面 Java 的版本发展,可以看到 Java 逐渐成长的过程,Java 也在向其他语言学习。直到现在 Java 也仍然具有很强的生命力,那些鼓吹 Java 已死的人肯定是有别有用心(这里就不点名某些培训机构了),还有一些担心未来 Java 会收费的,要知道 JDK 可不止 Oracle 一家的,开源的 OpenJDK (Oracle 的 JDK 开发者都亲口说 OpenJDK 的代码基本上就是 Oracle JDK 的源码)和其他厂家免费的 JDK 都可以用,所以这点大可不必担心,Java 的未来还是一片光明的。
套用 《满城尽是黄金甲》 中周润发对周杰伦说的一句话,我 Java 给你的才是你的,我 Java 不给你,你不能抢。
—— 本文转自我的微信公众号 《编程心路》。