为什么要学习 Java

Java​这门语言如今是互联网行业炙手可热的编程语言,像​阿里、美团​这些大厂,技术体系都是建立在 Java 之上。这些大厂又是很多新兴互联网企业的技术风向标,因此 Java 使用范围相当的广,对 Java 程序员的需求量就相当的大。

Java 不仅仅是一杯热腾腾的咖啡,还可以是一个靠得住的饭碗!

蜗牛从大学开始就接触 Java,工作之后也一直是使用 Java 这门程序设计语言作为编程首选。希望结合自己的知识体系和实践经验,产出 Java 学习的一系列教程,能够帮助到对 Java 感兴趣或者有志于从事 Java 程序员这个岗位的同学。

学习一个东西,首先要知道它是什么,基于什么样的背景下出现的,后续又是如何演变的。本文就简要介绍下 Java 的历史。

计算机系统层次与编程语言进化史

Java 是一种编程语言,和其他编程语言一样,它解决了人与计算机之间交流和沟通的问题,程序员这个特殊人群能编写,计算机能识别,从而能够设计出计算机的功能,便利人们的工作和生活。

那么 Java 是怎么出现的呢?都有其他编程语言了,为什么还需要它?

编程语言既然是运行在计算机之上的,我们首先看下计算机系统层次与编程语言的进化史。

你必须知道的 Java 简史_大数据

早期计算机系统是用​机器语言​进行编程,机器语言也就被称为​第一代程序设计语言​(First Generation Programing Language,​1GL)​。

机器语言简单讲就是由二进制数 0 和 1 组成的一串指令。众多指令构成的指令集,就可以操控计算机硬件。

但如果让你只用 0 和 1 来设计程序,你肯定头大,因为机器语言的​可读性,容错性和便捷性​真的是太差了!

因此后期的计算机系统用一些容易理解和记忆的字母或单词来代替一个特定的指令,比如:用「ADD」代表数字逻辑上的加减,这就是​第二代程序设计语言——汇编语言​。

汇编语言需要转换成机器指令,​操作系统​就提供了汇编语言与机器交互的界面。操作系统将指令集体系结构进行封装,抽象成被上层用户使用的接口,包括用户界面和底层服务。

如果学习过汇编语言的同学会知道,汇编语言是一种低级语言,仍然要和计算机硬件直接打交道,比如它还是要调用存储器存储数据。

这就意味着汇编语言不仅​编写复杂易出错​,它的​可移植性​也很差!我换一个有点差异的计算机硬件,这个应用程序就会挂。

为了解决这个问题,现代的计算机系统就支持了高级语言。首先出现的是​第三代程序设计语言——过程式高级语言​,编码时需要描述实现过程,即「如何做」,像 C 语言这种。

随着过程式高级语言的广泛使用,越来越多的人发现,他们其实不关心问题的解法和执行过程,他们只关心自己的输入记录以及最终的输出结果,其它工作希望都由系统来完成。

基于这样的思路,后来就出现了​第四代程序设计语言——非过程式高级语言​,编码时只需说明「做什么」,不需要描述具体的算法实现细节,像 Java 语言这种。

Java 萌芽期

Java 起初不叫 Java,它的出现也不是必然。

在 1990 年年末,美国一家叫 Sun 的公司着手研发嵌入式系统用于家电领域。当时安排 James Gosling 领导研发,内部把这个项目命名为 「​Green 计划​」,这个计划的目标是为下一代智能家电(电视机、微波炉、电话)编写通用的控制系统。

当时比较常用的编程语言是 C++,但 C++ 其实不太好用。第一,C++ 复杂,容易造成开发者误用,第二,C++ 缺少垃圾回收系统、可移植性、分布式和多线程等功能。

于是,Sun 首席科学家 Bill Joy 就提议开发新语言,在 C++ 的基础上,开发一种面向对象的环境。

James Gosling 就投入研发全新的语言,新的语言需要名字来展示生命力,这时 James Gosling 看到了办公室外的橡树,就把新语言命名为:​Oak​。

1992 年夏天,Green 计划完成 Oak 程序设计语言、类库以及 Green 操作系统的研发。

1992 年 11 月,Green 计划转化成 Sun 的全资子公司——FirstPerson 有限公司,准备大干一场。

但当他们拿这个产品对外进行商业合作时,却屡屡碰壁。有线电视业界觉得 FirstPerson 平台给了用户过多的控制权,拒绝同 FirstPerson 合作。

FirstPerson 意识到自己在电视工业领域没有前景,于是把公司并回到 Sun。

随着互联网和浏览器的出现,James Gosling 团队敏锐的意识到,互联网在向高度远程互动的方向上演变。

这个方向正是他们在做有线电视网中看到的,因此他们决定改变努力的目标,将 Green 计划中的技术应用到万维网上。

1994 年秋,团队完成第一个 Oak 语言的网页浏览器:WebRunner,并获得高层的一致好评。

Java 取名那些事儿

由于 Oak 商标被一家显卡制造商注册,于是将 Oak 更名为​Java​。Java 得名于​印度尼西亚爪哇岛​,这个地方因盛产​咖啡​而闻名。

Java 语言体系里也有很多和咖啡相关的东西。

比如 Java 源代码编译出的二进制文件 (.class 文件),如果你用十六进制编辑器打开,会发现最前面的 32 位显示为 CA FE BA BE,也就是词组 CAFE BABE(咖啡屋宝贝)。

以下是我将 Demo.java 文件编译成 Demo.class 文件后,用网站工具看到的内容,感兴趣的同学可以亲自试下。

public class Demo{

}

你必须知道的 Java 简史_编程语言_02

(附)文件十六进制查看网站:https://67tool.com/details/wjsljzck

再比如,Java 语言中的许多库类名称和咖啡有关,像 JavaBeans(咖啡豆)、NetBeans(网络豆)以及 ObjectBeans(对象豆)等等。SUN 和 JAVA 的标识也是一杯正冒着热气的咖啡。

你必须知道的 Java 简史_python_03

Java 初创期

1995 年初,Sun 对外发布 Java 语言,并提供免费下载,放在互联网上向所有人公开。本次的 Java 发布版本为​JDK BETA​。

JDK 全称 Java Development ToolKit,指 Java 语言开发工具包。

同时对外发布可在网页中运行 Java 程序(也叫 Java Applet)的网页浏览器——WebRunner,并将其更名为​HotJava。

与此同时,如日中天的网景也决定让旗下的浏览器对 Java 进行支持。

随后的几个月,Java 引爆互联网,数万人访问 Sun 官网,下载 Java 语言。互联网上立即出现数不清的 Java Applet,演示着小动画、小游戏等。

为了方便开发者能够快速开发出复杂的应用程序,Sun 独立出一条 Java 业务线,专门开发 Java 技术。

1996 年 1 月,​Sun 发布 JDK 1.0​。这个版本集成了 Java 运行环境和开发工具。

1997 年 2 月,​Sun 发布 JDK 1.1​。这个版本增加 JDBC、反射等能力。

Java 的出现,让互联网的网页动了起来。但随着 Adobe 公司 Flash 的流行,这款无须任何编程语言知识,就能做出各种动画的软件,逐步侵蚀了 Java 在浏览器端的地位。

有了 Flash 还用 Java 干嘛?Java 存在的意义是什么?Java 定位的问题一直深深困扰着 Sun。

直到 1998 年 12 月,Sun 发布​第二代 Java 企业平台,Java 版本为 JDK 1.2​,这是​Java 第一个里程碑式的版本​。

该版本引入集合框架,Java 基础类库等能力,同时发布了 JSP/Servlet、EJB 等企业平台规范。

1999 年 6 月,Sun 发布 Java 的三个版本:J2SE、J2EE 和 J2ME。


  • J2SE(Java 2 Platform, Standard Edition):Java 的标准版,用于普通 PC 应用的开发,是 Java 技术的核心与基础,也是 J2ME 和 J2EE 编程基础。
  • J2EE(Java 2 Platform, Enterprise Edition):Java 的企业版,用于企业级应用开发。
  • J2ME(Java 2 Platform, Micro Edition):Java 的微型版,用于嵌入式设备及消费类电器的开发。

可以看到,Sun 已经很明确 Java 的定位了,就是向 PC 、企业和移动三个方向发展。

JDK 1.2 影响深远,Java 发生了很多革命性的变化,并且它的很多能力和规范沿用至今。至此,Sun 时代 Java 的初创期结束,进入了飞速发展的阶段。

你必须知道的 Java 简史_编程语言_04

Java 发展期

2000 年 5 月,​J2SE 1.3 发布​。该版本将​Hotspot​作为 Java 的默认虚拟机实现。

同期 Servlet 规范开始流行,伴随着互联网的兴起,同其他 MVC 框架,成为 Web1.0 的网红。

2002 年 2 月,​J2SE 1.4 发布​。该版本的 Java 已经相对成熟,它提供了完备的语言特性,像 NIO、正则表达式和 XML 处理器等。

与此同时,基于 Java 语言的开源框架:Struts、Hibernate、Spring 以及大量企业应用服务器比如 WebLogic、JBoss 等相继涌现,这让 Java 语言继续飞速发展。

2004 年 9 月,​J2SE 1.5 发布​。这是 Java 第二个里程碑式的版本,为了表示这个版本的重要性,​J2SE 1.5 更名为 J2SE 5.0​。

该版本增加泛型、for-each 循环、自动装箱和拆箱、枚举、可变参数、静态导入、注解、并发包等。

2005 年,Sun 将 Java 的三个版本更名为​Java SE、Java EE 和 Java ME​。J2SE 5.0 也被更名为​Java SE 5​。

2006 年 12 月,​Java SE 6 发布​。该版本在语言语法改进不多,但在虚拟机内部做了大量改进,成为相对成熟稳定的一个版本。于是,很多企业都以这个版本作为 Java 开发版本来使用。

同年 Sun 做了一个伟大的决定,将​Java 开源​。通过 OpenJDK 计划,将 Java 虚拟机、Java 编译器和 Java 类库以 GPL 公开。

至此,Java 的生态初具规模,Java 的授权使用方式也很明确,Sun 时代 Java 的发展期结束,正走向它的成熟稳定。

你必须知道的 Java 简史_大数据_05

Java 稳定期

2009 年,​Oracle 收购 Sun​,Java 由 Oracle 继续维护。Java 的 Sun 时代终结,正式进入 Oracle 时代。

2011 年 7 月,Oracle 发布​Java SE 7​,主要特性是 NIO2 和 Fork/Join 并发包。

2014 年 3 月,Oracle 发布​Java SE 8(LTS)​,这是​Java 第三个里程碑版本​,也是长期(一般 3~5 年)支持的一个版本。

该版本不仅引入 Lambda 表达式支持了函数式编程能力,而且还增加了很多新的语言特性,比如 Streams,Date/Time API,集合的并行计算等。

Java SE 8 像 Java SE 6 一样,被很多企业作为开发版本来使用。尤其是新的 Java 应用,当然也有企业会选择把 Java 6 应用升级到 Java 8 应用。

2017 年 9 月,Oracle 发布​Java SE 9​,该版本最大特征就是模块化。

2018 年 3 月,Oracle 发布​Java SE 10​,该版本新增局部类型推断 var 等特性。

2018 年 9 月,Oracle 发布​Java SE 11(LTS)​,这是在 Java SE 8 之后又一个长期支持的版本,该版本开始支持 ZGC。

由于 Java SE 8 逐渐停止维护更新,再加上 Java SE 11 各种优秀的特性,而且是长期支持版本,预测未来很多企业将会使用 Java SE 11 作为开发版本来使用。

从这一年开始,Oracle 也宣布,此后 Java 保持每半年一个大版本的更新。

你必须知道的 Java 简史_人工智能_06

Java 极简编年史

我们再来看看 Java SE 的历史:


  • 1995.5: JDK Beta
  • 1996.1: JDK 1.0
  • 1998.12: JDK 1.2
  • 2000.5: J2SE 1.3
  • 2002.2: J2SE 1.4
  • 2004.9: J2SE 5.0
  • 2006.12: Java SE 6
  • 2011.7: Java SE 7
  • 2014.3: Java SE 8(LTS)
  • 2017.9: Java SE 9
  • 2018.3: Java SE 10
  • 2018.9: Java SE 11(LTS)
  • 往后每半年更新一个大版本

你必须知道的 Java 简史_编程语言_07

你必须知道的 Java 简史_编程语言_08