前言

这是一篇偏个人感悟的介绍文章,文中内容来自于网络,我搜集于此将他们整理,间或加入一些自己的想法。行文偶有错漏,若有余力,亦会后续修订。


适逢年初新冠肺炎爆发,前公司因美国疫情冲击被迫解散。几经周折在这艰难时间我讨到了一份工作。做了近5年的.net是要与之暂别了,似与友人所说:“.net core也许终将迎来辉煌,但那是10年之后,已不属于我们这一代人”。于是在近30岁的年龄上,我转向了Java。

一切从头开始,颇有一朝等级归0,再拿木剑走出新手村的感悟。万幸思想还在,经验还在,无惧再走一遭。


鉴于此。我认为,新学一门语言,最基础的并不是从“Hello World”开始,而是从其历史开始。先得了解他从哪来,才能知道他是谁,他为什么是这样。脱离历史去学习语言是不明智的,学习任何事物亦如此。

了解语言历史,可以整体把握语言起源和其进化脉络,从而解决下面这几个问题:

  • 为什么选择这个版本。
  • 为什么在这个时间点会出现并需要这个特性。
  • 这门语言的重点在哪里,应该怎样去学习。

Java诞生

Java语言的诞生具有一定的戏剧性,它并不是经过精心的策划,制作,最后产生的划时代产品。从某种角度来看,java语言的诞生完全是一种误会。

1990年末,太阳(Sun)公司预料嵌入式系统将在未来家用电器领域大显身手。

太阳公司

于是太阳公司成立了一个由詹姆斯·高斯林(James Gosling)领导的格林(Green)计划 ,准备为下一代智能家电(电视机、微波炉、电话)编写一个通用控制系统。

詹姆斯·高斯林

该团队最初考虑使用C++语言,但很多成员包括太阳公司首席科学家比尔·乔伊(Bill Joy)发现C++和可用API在某些方面存在很大问题。工作小组使用嵌入式平台,可用系统资源极其有限,C++太过复杂,以致很多开发者经常错误使用。并且C++缺少垃圾回收系统,可移植性差,缺乏分布式和多线程等功能。

C++

权衡可用资金后,乔伊决定开发一种新语言,他提议在C++基础上开发一种面向对象的环境。于是,高斯林试图通过修改和扩展C++已有功能来满足要求,但后来他放弃了。他决定创造一种全新的语言----Oak(橡树)。他们都具有不将就精神,在具有资金的支持下不断寻求创新。

Oak

到了1992年夏天,格林计划已经完成了新平台的部分功能,包括格林操作系统,Oak的程序设计语言、类库等。同年11月,格林计划被转化成第一人(FirstPerson)有限公司----一个太阳公司的全资子公司。

第一人团队致力于创建一种高度互动设备。当时代华纳公司发布了一个关于电视机顶盒的征求提议书时,第一人团队改变了他们的目标。作为对征求提议书的响应,提出了一个机顶盒平台提议。但是有线电视业界觉得第一人的平台给予用户过多控制权,因此第一人的投标败给了硅图(SGI)公司。同时,3DO公司另外一笔关于机顶盒的交易没有成功。此时,可怜的格林项目几乎接近夭折,甚至格林项目的一半成员也被调到了其他项目组。

时间来到1994年夏天,互联网和浏览器的出现不仅给广大互联网用户带来福音,也给Oak语言带来了新的生机。高斯林立即意识到,这是一个千载难逢的机会,于是对Oak进行了小规模改造。到了1994年秋,小组中的诺顿(Naughton)和乔纳森·佩恩(Jonathan Payne)完成了第一个Oak语言的网页浏览器----WebRunner。

WebRunner HotJava

太阳公司实验室主任伯特·萨瑟兰(Bert Sutherland)和技术总监埃里克·施密特(Eric Schmict)观看了浏览器的演示,对浏览器效果给予了高度评价。当时Oak这个商品已经被注册,于是只得将Oak更名为Java。

Java

太阳公司在1995年初发布了Java语言,太阳公司直接把Java放到互联网上免费给大家使用,甚至连源代码也不保密,向所有人公开。几个月后,让所有人都吃惊的事情发生了。Java成了互联网上最热门的宝贝,竟有10万多人次访问了太阳公司的网页,下载Java语言。然后,互联网上立即就有了数不清的Java小程序(Applet),演示着各种小动画、小游戏等。
Java语言终于眼眉吐气了,成为了一种广为人知的编程语言。

Java发展

在Java语言出现之前,互联网网页实质上就像一张纸,不会有任何动态内容。有了Java语言后,浏览器的功能被扩大了,Java程序可以直接在浏览器里运行,可以直接与远程服务器交互。用Java语言编程,可以在互联网上像传送电子邮件一样方便地传送程序文件!

太阳公司虽然推出了Java,但这只是一种语言,如果想开发复杂应用程序,必须要有一个强大的开发类库。因此,太阳公司在1996年年初发布了JDK 1.0(Java Development Kit)。这个版本包括两部分,运行环境JRE(Java Runtime Environment)和开发环境JDK。运行环境包括核心API、集成API、用户界面API、发布技术、Java虚拟机(Java Virtual Machine)5个部分。开发环境包括编译Java程序的编译器(即Javac命令)。

接着,太阳公司在1997年2月18日发布了JDK 1.1。JDK 1.1增加了即时编译JIT(Just In Time)编译器。JIT和传统编译器不同,传统编译器是编译一条,运行完成后将其扔掉。而JIT会将经常用到的指令保存在内存中,当下次调用时就不需要重新编译了,通过这种方式提升了JDK的效率。

JDK JRE JVM

但一直以来,Java主要应用就是网页上的Applet以及一些移动设备。到了1996年年底,Flash面世了,这是一种更简单的动画设计软件,使用Flash几乎无须任何编程语言知识,就可以做出丰富多彩的动画。随后Flash增加了ActionScript编程脚本,Flash逐渐蚕食了Java在网页上的地盘。

从1995年Java诞生到1998年底,Java语言虽然成为了互联网上广泛使用的编程语言,但它并没有找到一个准确定位,也没有找到它必须存在的理由。Java语言可以编写Applet,而Flash一样可以做到,并且更快,开发成本更低。

Flash

直到1998年12月,太阳公司发布了Java历史上最重要的JDK版本,JDK 1.2,伴随着JDK 1.2一同发布的还有JSP(JavaServer Pages)/Servlet、EJB(Enterprise Java Beans)等规范,并将Java分成J2SE(Java 2 Standard Edition)、J2EE(Java 2 Enterprise Edition)和J2ME(Java 2 Micro Edition)三个版本。

  • J2SE:整个Java技术的核心和基础,它是J2ME、J2EE编程的基础。
  • J2EE:Java技术中应用最广泛的部分,J2EE提供了企业应用开发相关的完整解决方案。
  • J2ME:主要用于控制移动设备和信息家电等有限存储的设备。

此外,JDK 1.2还将API分成了三类:

  • 核心API:由太阳公司制定的基本API,所有Java平台都应提供,即Java核心类库。
  • 可选API:这是太阳公司为JDK提供的扩充API,这些API因平台而异。
  • 特殊API:用于满足特殊要求的API,如JCA(Java Connector Architecture)和JCE(Java Cryptography Extension)等第三方加密类库。

至此,太阳公司开始使用Java 2这一名称,我们已经极少使用JDK 1.1版本,因此我们所说的Java一般从Java 2开始。J2EE提供了企业应用开发相关的完整解决方案。这标志着Java已经吹响了向企业、桌面和移动三个领域进军的号角,这个时期也是Java高速发展的时期。在Java 2中,Java发生了很多革命性的变化,而这些革命性变化一直沿用至今,对于Java的发展形成了深远影响,直到今天还经常看到J2EE、J2ME等名称。

Java 1.2

2002年,太阳公司发布了JDK历史上最成熟的版本----JDK 1.4成为发展最快的一个JDK版本。JDK 1.4已经可以使用Java实现大多数应用了。在此期间,Java语言在企业应用领域大放异彩,涌现出大量基于java语言的开源框架,Struts、WebWork、Hibernate、Spring等。大量企业应用服务也开始涌现,WebLogic、WebSphere、JBoss等,这些都标志着Java语言进入了飞速发展时期。

2004年10月,太阳公司发布了万众期待的JDK 1.5。同时,太阳公司将JDK 1.5改名为Java SE 5,J2EE、J2ME也相应地改名为Java EE和Java ME。JDK1.5增加了诸如泛型、增强的for语句、可变数量形参、注释、自动拆箱和装箱等功能。同时,也发布了新的企业级平台规范,如通过注释等新特性来简化EJB的复杂性,并推出了自己的MVC框架规范----JSF(JavaServer Faces),JSF规范类似于asp.net的服务器端控件,通过它可以快速构建复杂的JSP界面。

Java 2

2006年12月,太阳公司发布了Java EE 6。一直以来,太阳公司维持着大约2年发布一次JDK新版本的习惯。但在2009年4月20日,甲骨文(Oracle)公司宣布将收购太阳公司。太阳公司倒下了,不过Java的大旗依然猎猎作响。

2011年7月28日,甲骨文公司终于如约发布了Java SE 7,这次版本升级经过了将近5年时间。Java SE 7也是甲骨文公司发布的第一个Java版本,引入了二进制整数,支持字符串的switch语句,棱形语法,多异常捕抓,自动关闭资源的try语言等新特性。

甲骨文公司

2014年3月18日,甲骨文公司发布了Java SE 8,这次版本升级为Java带来了全新的Lambda表达式,流式编程等大量新特性,这些新特性使得Java变得更加强大。

2017年9月22日,甲骨文公司发布了Java SE 9,这次版本升级强化了Java的模块化系统,让庞大的Java语言更轻量化,而且采用了更高效,更智能的垃圾回收器,并在核心类库上进行了大量更新,可以进一步简化编程。但对语法本身更新并不多(毕竟Java语言已经足够成熟)

2018年3月21日甲骨文公司发布了Java第十个大版本。为了更快地迭代,更好地跟进Java社区反馈,Java语言版本发布周期调整为每隔6个月发布一次。Java 10是这一新规则之后,采用新发布周期的第一个大版本。Java 10带来了很多新特性,其中最备受关注的莫过于局部变量类型推断。除此之外,还有其他包括垃圾收集器改善、GC改进、性能提升、线程管控等一批新特性。

2018年9月25日,甲骨文公司宣布Java 11 (18.9 LTS) 正式发布,值得注意的是,Java 11是Java的一个长期支持版本LTS(Long Term Support),而上一个长期支持版本是2014年发布的Java 8。Java 11的技术支持时间直到2023年9月份,补丁和扩展支持直到2026年9月份。同时甲骨文公司公布的Java后续版本路线图展示新的长期支持版本将每三年发布一次,根据后续的发布计划,下一个长期支持版Java 17将于2021年发布。

Java演化

2019年3月19日,Java 12正式发布。
2019年9月17日,Java 13发布。
2020年3月17日,在全球抗疫背景下,Java 14正式发布。

Java历史年表

截至2020年5月6日,Java累计经历了13次主要版本更新,来到了Java 14。

版本 发布日期 主要事件
Java 1995年5月23日 Java语言发布,用Java实现的浏览器和Java Applet被大量应用。
JDK 1.0 1996年1月23日 奠定了JDK、JRE、JVM的体系结构。
JDK 1.1 1997年2月18日 加入JIT,提升JDK效率。
JDK 1.2(Java 2) 1998年12月4日 确立J2SE、J2EE、J2ME产品结构,开始飞速发展。
JDK 1.3 2000年5月18日 内置HotSpot JVM。
JDK 1.4 2002年2月13日 XML处理,断言,支持正则表达式。
Java SE 5(JDK 1.5) 2004年9月30日 静态导入,泛型,for-each循环,自动拆、装箱,枚举,可变参数。
Java SE 6(JDK 1.6) 2006年12月11日 提供动态语言支持,同步垃圾回收。
Java SE 7(JDK 1.7) 2011年7月28日 字符串的switch语句,多异常捕抓。
Java SE 8(JDK 1.8) 2014年3月18日 Lambda表达式。
Java 9 2017年9月22日 轻量级json API,垃圾收集机制更新。
Java 10 2018年3月21日 局部变量类型推断,Java后续版本快速迭代更新。
Java 11 2018年9月25日 常用类增强,Java 11是继Java 8之后的首个长期支持本版。
Java 12 2019年3月19日 switch表达式增强。
Java 13 2019年9月17日 文本块支持。
Java 14 2020年3月17日 instanceof支持模式匹配。

目前,Java 7,8的使用比例较多,其次为11,12。企业青睐长期支持版本。

结语

没想到一口气写完了这篇文章,严格来说我只是一个搬运工加排版编辑者。通过这样一次梳理,我也记住了一些Java领域的专有名词。千里之行始于足下。言于此,祝诸君(也包括自己)前程似锦,一片坦途。

引用

本文遵循以下引用声明及协议,若存在任何侵权行为,请联系本文作者删除。


版权声明:本文部分内容为CSDN博主「Jessica-小波」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wxb1410...


穿越时空的鱼
4 声望0 粉丝