共计 2952 个字符,预计需要花费 8 分钟才能阅读完成。
Java 最早是由 SUN 公司(已被 Oracle 收购)的詹姆斯·高斯林(高司令,人称 Java 之父)在上个世纪 90 年代初开发的一种编程语言,最初被命名为 Oak,目标是针对小型家电设备的嵌入式应用,结果市场没啥反响。谁料到互联网的崛起,让 Oak 重新焕发了生机,于是 SUN 公司改造了 Oak,在 1995 年以 Java 的名称正式发布,原因是 Oak 已经被人注册了,因此 SUN 注册了 Java 这个商标。随着互联网的高速发展,Java 逐渐成为最重要的网络编程语言。
Java 介于编译型语言和解释型语言之间。编译型语言如 C、C++,代码是直接编译成机器码执行,但是不同的平台(x86、ARM 等)CPU 的指令集不同,因此,需要编译出每一种平台的对应机器码。解释型语言如 Python、Ruby 没有这个问题,可以由解释器直接加载源码然后运行,代价是运行效率太低。而 Java 是将代码编译成一种“字节码”,它类似于抽象的 CPU 指令,然后,针对不同平台编写虚拟机,不同平台的虚拟机负责加载字节码并执行,这样就实现了“一次编写,到处运行”的效果。当然,这是针对 Java 开发者而言。对于虚拟机,需要为每个平台分别开发。为了保证不同平台、不同公司开发的虚拟机都能正确执行 Java 字节码,SUN 公司制定了一系列的 Java 虚拟机规范。从实践的角度看,JVM 的兼容性做得非常好,低版本的 Java 字节码完全可以正常运行在高版本的 JVM 上。
随着 Java 的发展,SUN 给 Java 又分出了三个不同版本:
- Java SE:Standard Edition
- Java EE:Enterprise Edition
- Java ME:Micro Edition
这三者之间有啥关系呢?
┌───────────────────────────┐
│Java EE │
│ ┌────────────────────┐ │
│ │Java SE │ │
│ │ ┌─────────────┐ │ │
│ │ │ Java ME │ │ │
│ │ └─────────────┘ │ │
│ └────────────────────┘ │
└───────────────────────────┘
简单来说,Java SE 就是标准版,包含标准的 JVM 和标准库,而 Java EE 是企业版,它只是在 Java SE 的基础上加上了大量的 API 和库,以便方便开发 Web 应用、数据库、消息服务等,Java EE 的应用使用的虚拟机和 Java SE 完全相同。
Java ME 就和 Java SE 不同,它是一个针对嵌入式设备的“瘦身版”,Java SE 的标准库无法在 Java ME 上使用,Java ME 的虚拟机也是“瘦身版”。
毫无疑问,Java SE 是整个 Java 平台的核心,而 Java EE 是进一步学习 Web 应用所必须的。我们熟悉的 Spring 等框架都是 Java EE 开源生态系统的一部分。不幸的是,Java ME 从来没有真正流行起来,反而是 Android 开发成为了移动平台的标准之一,因此,没有特殊需求,不建议学习 Java ME。
因此我们推荐的 Java 学习路线图如下:
- 首先要学习 Java SE,掌握 Java 语言本身、Java 核心开发技术以及 Java 标准库的使用;
- 如果继续学习 Java EE,那么 Spring 框架、数据库开发、分布式架构就是需要学习的;
- 如果要学习大数据开发,那么 Hadoop、Spark、Flink 这些大数据平台就是需要学习的,他们都基于 Java 或 Scala 开发;
- 如果想要学习移动开发,那么就深入 Android 平台,掌握 Android App 开发。
无论怎么选择,Java SE 的核心技术是基础,这个教程的目的就是让你完全精通 Java SE 并掌握 Java EE!
Java 版本
从 1995 年发布 1.0 版本开始,到目前为止,最新的 Java 版本是 Java 21:
时间 | 版本 |
---|---|
1995 | 1.0 |
1998 | 1.2 |
2000 | 1.3 |
2002 | 1.4 |
2004 | 1.5 / 5.0 |
2005 | 1.6 / 6.0 |
2011 | 1.7 / 7.0 |
2014 | 1.8 / 8.0 |
2017/9 | 1.9 / 9.0 |
2018/3 | 10 |
2018/9 | 11 |
2019/3 | 12 |
2019/9 | 13 |
2020/3 | 14 |
2020/9 | 15 |
2021/3 | 16 |
2021/9 | 17 |
2022/3 | 18 |
2022/9 | 19 |
2023/3 | 20 |
2023/9 | 21 |
2024/3 | 22 |
本教程使用的 Java 版本是最新版的 Java 22。
名词解释
初学者学 Java,经常听到 JDK、JRE 这些名词,它们到底是啥?
- JDK:Java Development Kit
- JRE:Java Runtime Environment
简单地说,JRE 就是运行 Java 字节码的虚拟机。但是,如果只有 Java 源码,要编译成 Java 字节码,就需要 JDK,因为 JDK 除了包含 JRE,还提供了编译器、调试器等开发工具。
二者关系如下:
┌─ ┌──────────────────────────────────┐
│ │ Compiler, debugger, etc. │
│ └──────────────────────────────────┘
JDK ┌─ ┌──────────────────────────────────┐
│ │ │ │
│ JRE │ JVM + Runtime Library │
│ │ │ │
└─ └─ └──────────────────────────────────┘
┌───────┐┌───────┐┌───────┐┌───────┐
│Windows││ Linux ││ macOS ││others │
└───────┘└───────┘└───────┘└───────┘
要学习 Java 开发,当然需要安装 JDK 了。
那 JSR、JCP……又是啥?
- JSR 规范:Java Specification Request
- JCP 组织:Java Community Process
为了保证 Java 语言的规范性,SUN 公司搞了一个 JSR 规范,凡是想给 Java 平台加一个功能,比如说访问数据库的功能,大家要先创建一个 JSR 规范,定义好接口,这样,各个数据库厂商都按照规范写出 Java 驱动程序,开发者就不用担心自己写的数据库代码在 MySQL 上能跑,却不能跑在 PostgreSQL 上。
所以 JSR 是一系列的规范,从 JVM 的内存模型到 Web 程序接口,全部都标准化了。而负责审核 JSR 的组织就是 JCP。
一个 JSR 规范发布时,为了让大家有个参考,还要同时发布一个“参考实现”,以及一个“兼容性测试套件”:
- RI:Reference Implementation
- TCK:Technology Compatibility Kit
比如有人提议要搞一个基于 Java 开发的消息服务器,这个提议很好啊,但是光有提议还不行,得贴出真正能跑的代码,这就是 RI。如果有其他人也想开发这样一个消息服务器,如何保证这些消息服务器对开发者来说接口、功能都是相同的?所以还得提供 TCK。
通常来说,RI 只是一个“能跑”的正确的代码,它不追求速度,所以,如果真正要选择一个 Java 的消息服务器,一般是没人用 RI 的,大家都会选择一个有竞争力的商用或开源产品。
参考:Java 消息服务 JMS 的 JSR:https://jcp.org/en/jsr/detail?id=914
请问 Java 之父是: