Java 起源、发展与技术体系 | JavaSE

Java 起源、发展与技术体系

一、学习目标

完成本章后,你应该能够:

  • 能够从“编程语言、运行平台、技术生态”三个层面解释 Java 是什么。
  • 能够说明 Java、Sun Microsystems、Oracle 与 James Gosling 之间的关系。
  • 能够概括 Java 从诞生到现代版本的发展过程,并理解 LTS 版本的意义。
  • 能够区分 Java SE、Java EE / Jakarta EE、Java ME 的定位。
  • 能够解释 Java 为什么能够长期用于企业级软件开发。
  • 能够根据应用场景判断自己当前学习的 Java 技术属于哪个层次。

二、核心知识

2.1 Java 到底是什么

初学 Java 时,最容易得到的答案是:

Java 是一门高级编程语言。

这个答案没有错,但并不完整。

在实际学习中,“Java”至少可以从三个层面理解。

第一层:Java 是一门编程语言

Java 提供了一套完整的语言规则,例如:

  • 数据类型;
  • 变量;
  • 运算符;
  • 分支与循环;
  • 方法;
  • 类与对象;
  • 继承;
  • 多态;
  • 接口;
  • 泛型;
  • Lambda 表达式。

以后我们编写:

public class HelloJava {
    public static void main(String[] args) {
        System.out.println("Hello Java");
    }
}

使用的就是 Java 编程语言(Java Programming Language)

编程语言解决的问题是:

程序员应该使用什么语法描述数据、逻辑和程序结构?


第二层:Java 是一个运行平台

Java 程序并不是简单地把源代码直接交给 Windows、Linux 或 macOS 执行。

Java 建立了一套自己的运行体系,其中包括:

  • Java 虚拟机(Java Virtual Machine,JVM);
  • Java 标准类库;
  • Java 运行时所需的各种组件;
  • Java 程序使用的标准二进制格式。

因此 Java 不只是“语法”,它还有自己的运行平台。

后面的章节会详细学习:

.java → .class → JVM → 操作系统 / CPU

这一套运行机制。


第三层:Java 是一个庞大的技术生态

Java 发展三十多年以后,围绕它形成了非常庞大的软件生态。

除了 Java SE 本身,还有:

  • 企业级 Java 技术;
  • Web 开发技术;
  • 数据库访问技术;
  • 测试技术;
  • 构建工具;
  • Web 框架;
  • 分布式系统技术;
  • 大数据生态;
  • 开发工具;
  • 各种第三方开源库。

因此,在工程领域中说“学习 Java”,通常并不是只学习一种语言语法,而是在逐步进入整个 Java 技术生态。

不过任何复杂 Java 技术最终都建立在 Java SE 基础之上。

所以我们的第一步是:

先把 Java SE 学扎实。


2.2 Java 的诞生

Java 的发展可以追溯到 Sun Microsystems。

1991 年左右,Sun 内部启动了一个面向消费电子设备的软件项目,James Gosling 等工程师参与其中。

这个项目早期使用的语言叫做:

Oak

后来由于名称等原因,Oak 最终更名为:

Java

1995 年,Sun 正式向外界推出 Java。

Java 最初面对的环境与今天并不相同。当时互联网正在快速发展,而软件需要面对越来越多不同类型的计算机和操作系统。

于是 Java 一个非常重要的设计方向逐渐显现出来:

尽可能降低程序对具体硬件和操作系统的依赖。

这也是后来 Java 跨平台能力的重要来源。


2.3 James Gosling 与 Java

James Gosling 是 Java 早期最核心的设计者之一,通常被称为:

Java 之父(Father of Java)

但是需要注意:

Java 并不是一个人完成的。

它是 Sun Microsystems 一个工程团队长期设计、开发和演进的结果。

James Gosling 之所以具有非常特殊的历史地位,是因为他深度参与了 Java 语言及其早期系统的设计。

所以更严谨的理解是:

James Gosling 是 Java 最重要的创造者和早期核心设计者之一,而 Java 本身是一个大型团队工程成果。


2.4 Sun 与 Oracle

Java 最初由:

Sun Microsystems

推动和发展。

2009 年,Oracle 宣布收购 Sun Microsystems。

2010 年,这项收购正式完成。

因此今天 Java 技术体系中会经常看到:

Oracle

例如:

  • Oracle JDK;
  • Oracle Java Documentation;
  • Java Language Specification;
  • Java Virtual Machine Specification;
  • Java SE API Documentation。

所以可以建立下面这条历史关系:

Sun Microsystems
       │
       │ 创建和早期发展 Java
       ▼
      Java
       │
       │ Oracle 收购 Sun
       ▼
     Oracle
       │
       └── 继续参与 Java / JDK 的开发与维护

不过现代 Java 并不是一个完全封闭的单厂商项目。

Java 的重要开源实现和研发工作还与:

OpenJDK

密切相关。

因此今天理解 Java 时,不应该只理解成:

“Oracle 的一门语言。”

更合理的理解是:

Java 是拥有语言规范、虚拟机规范、标准 API、OpenJDK 开源实现以及庞大产业生态的一整套技术体系。


2.5 Java 为什么能够长期流行

一种编程语言能够存在三十多年,并长期用于真实生产系统,不可能只依靠“语法简单”。

Java 的长期生命力来自多个方面。

1. 跨平台能力

Java 建立了 JVM 这一运行层。

同一份符合要求的 Java 字节码,可以由不同平台上的 JVM 实现运行。

这极大降低了程序直接依赖具体操作系统和 CPU 的程度。


2. 完整的标准类库

Java SE 提供了大量标准 API,例如:

  • 字符串处理;
  • 集合;
  • 文件 IO;
  • 网络通信;
  • 并发;
  • 日期时间;
  • 数据库访问基础;
  • 安全;
  • 反射。

开发者不需要从零实现所有底层能力。


3. 面向对象与大型软件工程能力

Java 具有:

  • 类;
  • 对象;
  • 封装;
  • 继承;
  • 多态;
  • 接口;

等机制。

这些能力非常适合组织大型程序。

Java 后来又加入:

  • 泛型;
  • Lambda;
  • Stream;
  • 模块系统;

等能力,使语言继续演进。


4. 自动内存管理

Java 程序的对象主要由 JVM 负责内存管理。

其中非常重要的一部分就是:

垃圾回收(Garbage Collection,GC)

开发者通常不需要像传统手动内存管理语言那样直接释放每一个对象占用的内存。

这降低了大量内存管理工作的复杂度。

GC 的具体机制属于 JVM 深入内容,本课程不会在这里展开。


5. 丰富且成熟的生态

Java 在长期发展过程中形成了大量成熟技术。

对于企业开发而言,成熟意味着:

  • 工具充足;
  • 文档丰富;
  • 第三方库丰富;
  • 人才生态庞大;
  • 大量已有系统可以维护;
  • 技术风险相对容易评估。

这也是 Java 在企业软件领域长期保持重要地位的原因之一。


6. 长期兼容性

Java 非常重视兼容性。

一个成熟企业系统可能需要维护很多年。

如果语言每次升级都大规模破坏旧程序,企业迁移成本会非常高。

Java 长期演进中的一个重要特点,就是尽量保持已有程序和类文件的兼容性。

这并不意味着“任何 Java 程序永远都能直接运行”,但兼容性始终是 Java 平台非常重要的设计目标。


2.6 Java 能做什么

Java 的应用领域非常广。

企业服务端开发

这是现代 Java 最重要的应用领域之一。

例如:

  • 用户系统;
  • 订单系统;
  • 支付系统;
  • 后台管理系统;
  • 企业信息系统;
  • 大型服务端应用。

Java 强大的生态和成熟的软件工程体系,非常适合长期维护的大型项目。


Web 后端开发

Java 可以用于构建:

  • REST API;
  • Web 服务;
  • 微服务;
  • 后端业务系统。

你以后学习 Java Web、Spring、Spring Boot 等技术时,底层依然大量依赖 Java SE 中学到的:

  • 面向对象;
  • 集合;
  • 异常;
  • IO;
  • 多线程;
  • 反射;
  • 注解。

大数据与分布式系统

Java 在许多大数据和分布式技术中长期具有重要地位。

这里并不意味着学完 JavaSE 就能直接开发复杂分布式系统,而是:

扎实的 Java 基础,是进一步理解这些 Java 生态技术的重要前提。


桌面应用

Java 可以使用相关 GUI 技术编写桌面程序。

本教程后面的综合实战中,也会接触 GUI 与事件驱动编程。


网络程序

Java 标准库直接提供网络编程能力。

后面会学习:

  • IP;
  • 端口;
  • UDP;
  • TCP;
  • Socket;
  • ServerSocket。

最终能够编写基础客户端与服务端程序。


嵌入式和资源受限设备

Java ME 长期服务于资源受限设备、嵌入式设备以及部分移动设备场景。

现代 Oracle 对 Java ME 的定位也更多强调:

  • 嵌入式设备;
  • 微控制器;
  • 传感器;
  • 网关;
  • IoT 设备。

2.7 Java 的三类重要平台体系

传统 Java 教学中经常介绍三个平台:

  • Java SE;
  • Java EE;
  • Java ME。

今天需要稍微更新一下这个知识。


Java SE

全称:

Java Platform, Standard Edition

中文通常称为:

Java 平台标准版

Java SE 提供 Java 技术最基础、最核心的能力,例如:

  • Java 语言;
  • JVM 规范;
  • 核心 API;
  • 集合;
  • IO;
  • 网络;
  • 并发;
  • 反射。

我们现在学习的整套教程就是:

Java SE

可以把它理解为:

Java 技术体系的地基。


Java EE / Jakarta EE

Java EE 全称:

Java Platform, Enterprise Edition

它是在 Java SE 基础上发展起来的企业级 Java 技术体系。

后来 Oracle 将相关 Java EE 技术贡献给 Eclipse Foundation。

Java EE 随后演进为:

Jakarta EE

因此现代资料中应该理解成:

Java EE
   │
   │ 技术与规范继续演进
   ▼
Jakarta EE

Jakarta EE 面向:

  • 企业应用;
  • 服务端应用;
  • Web 应用;
  • 云原生企业 Java 应用。

所以今天如果看到:

Java EE
Jakarta EE

不要认为这是两个完全无关的生态。

Jakarta EE 是 Java EE 技术体系的后续演进。


Java ME

全称:

Java Platform, Micro Edition

主要面向资源受限环境。

典型方向包括:

  • 嵌入式设备;
  • IoT;
  • 传感器;
  • 网关;
  • 一些移动和专用终端。

Java ME 与我们当前学习的 Java SE 并不是简单的“高级版和低级版”关系。

它们主要面对不同类型的运行环境和应用场景。


2.8 三个平台应该怎么理解

可以使用下面这张表建立整体认识:

| 平台 | 定位 | 典型方向 | | -------------------- | --------------------------------- | ------------------------------------- | | Java SE | Java 标准平台、整个 Java 技术基础 | 通用 Java、桌面、基础服务端、核心 API | | Java EE / Jakarta EE | 企业级 Java 标准体系 | 企业应用、Web、服务端、云原生 | | Java ME | 面向资源受限设备的平台 | 嵌入式、IoT、专用设备 |

其中最重要的一点是:

Java SE 是当前学习主线,也是继续进入其他 Java 技术的重要基础。


2.9 Java 版本的发展

Java 并不是 1995 年发布之后就停止变化了。

它一直在持续演进。

下面只保留几个理解 Java 发展非常重要的节点:

| 时间 | 代表版本 / 事件 | 意义 | | ---- | ----------------- | ---------------------------- | | 1995 | Java 正式推出 | Java 进入公众视野 | | 1996 | JDK 1.0 | Java 早期正式开发平台 | | 1997 | JDK 1.1 | Java 早期重要升级 | | 1998 | Java 1.2 / Java 2 | Java 平台进一步扩展 | | 2004 | Java 5 | 泛型、枚举、注解等重要能力 | | 2014 | Java 8 | Lambda、Stream 等重要特性 | | 2017 | Java 9 | 模块系统以及新的版本演进阶段 | | 2018 | Java 11 | LTS | | 2021 | Java 17 | LTS | | 2023 | Java 21 | LTS,本教程教学基线 | | 2025 | Java 25 | 后续 LTS | | 2026 | Java 26 | 后续功能版本 |

学习这张表的目的不是背日期。

真正需要建立的认识是:

Java 是一门持续演进的语言和平台。


2.10 什么是 LTS

LTS:

Long-Term Support

通常译为:

长期支持版本

Java 现在保持较快的版本迭代节奏,但企业项目不一定会随着每一个新版本立即升级。

企业往往更加关注:

  • 稳定性;
  • 安全更新;
  • 维护周期;
  • 第三方框架兼容性;
  • 长期支持。

因此 LTS 版本往往受到企业开发者更多关注。

Oracle 当前的长期支持版本序列中包括:

  • Java 8;
  • Java 11;
  • Java 17;
  • Java 21;
  • Java 25。

本教程仍然统一使用:

JDK 21

作为教学基线。

原因不是“21 永远是最新版”,而是我们需要一个统一、现代、稳定的版本完成整个学习体系。


三、使用方法

本章没有要求你马上编写复杂 Java 程序。

真正需要掌握的是:

当看到一个 Java 技术名词时,能够判断它位于整个技术体系的什么位置。

3.1 看到 Java SE

想到:

Java 核心平台
│
├── Java 语言
├── 核心 API
├── JVM
├── 集合
├── IO
├── 网络
├── 并发
└── 反射等

当前整个 JavaSE 教程都属于这一层。


3.2 看到 Jakarta EE

想到:

Java SE
   │
   ▼
企业级 Java 标准
   │
   ▼
Jakarta EE

它不是 Java 基本语法的替代品。

而是在 Java 基础之上建立企业应用能力。


3.3 看到 Java ME

想到:

资源受限设备
嵌入式
IoT
专用终端

它不是当前 Java 后端学习主线。


3.4 看到某个 JDK 版本

例如:

JDK 8
JDK 17
JDK 21
JDK 25

首先判断两个问题:

  1. 它属于哪个 Java SE 版本?
  2. 当前项目为什么使用这个版本?

对于本教程:

教学基线 = JDK 21

后续出现版本差异时,会明确标记。


四、原理与进阶

4.1 Java 语言、Java 平台和 JDK 不是同一个概念

这是初学者非常容易混淆的一组概念。

Java 语言

描述:

Java 代码应该怎么写。

例如:

  • class
  • if
  • for
  • extends
  • interface

属于语言层面。


Java 平台

描述:

Java 程序依赖什么规范、运行环境和标准 API 工作。

例如:

  • JVM;
  • Java SE API;
  • Java 模块;
  • 标准运行机制。

属于平台层面。


JDK

描述:

开发者真正安装和使用的一套 Java 开发工具。

其中包括:

  • Java 运行能力;
  • 编译工具;
  • 调试和诊断工具;
  • 开发相关工具。

JDK、JRE、JVM 的具体关系将在下一章详细学习。


4.2 Java 是“纯面向对象语言”吗

不建议把 Java 简单描述成:

“纯面向对象语言”。

Java 确实是一门以面向对象为核心的重要语言,但 Java 同时存在:

  • int
  • double
  • boolean
  • char

等基本数据类型。

现代 Java 还支持:

  • Lambda;
  • 函数式接口;
  • Stream 风格的数据处理。

因此更准确的说法是:

Java 是一门以面向对象为核心、同时支持多种现代编程能力的通用编程语言。


五、实践应用

当你以后进入真实 Java 项目时,可以把整个技术体系想象成一座建筑:

┌──────────────────────────────┐
│     Spring / 各种工程框架     │
├──────────────────────────────┤
│     Web / 数据库 / 分布式      │
├──────────────────────────────┤
│ Java 集合 / IO / 并发 / 网络   │
├──────────────────────────────┤
│        Java 面向对象           │
├──────────────────────────────┤
│        Java 基础语法           │
├──────────────────────────────┤
│     JDK / JVM / Java SE       │
└──────────────────────────────┘

如果下面的地基不牢:

  • 类型系统不清楚;
  • 面向对象不清楚;
  • 集合不会选;
  • 异常不会处理;
  • IO 不理解;
  • 多线程没有执行模型;

那么学习上层框架时,很容易变成:

“代码能复制出来,但是不知道为什么这样写。”

所以 JavaSE 的价值并不在于它“基础”。

恰恰相反:

它决定了后面 Java 技术能够理解到什么深度。


六、常见问题

6.1 Java、Java SE、JDK 是一回事吗?

不是。

简单区分:

  • Java:可以指语言,也可以泛指整个 Java 技术生态;
  • Java SE:Java 标准平台;
  • JDK:开发 Java 程序所使用的开发工具包。

下一章会进一步拆解 JDK。


6.2 Java EE 消失了吗?

不能简单理解成“消失”。

Java EE 相关技术后来进入 Eclipse Foundation,并继续演进为 Jakarta EE。

现代企业 Java 标准体系应该认识:

Jakarta EE


6.3 Java ME 是不是 Android?

不是。

Java ME 是独立的 Java 平台体系。

Android 开发历史上大量使用 Java 语言,但 Android 的运行平台并不能简单等同于标准 Java SE 或 Java ME。

所以:

“Android 可以写 Java”

不等于:

“Android 就是 Java ME”。


6.4 现在最新 Java 已经不是 21,为什么还学 JDK 21?

因为“最新版”和“教学基线”是两个概念。

当前 Java 仍然持续快速演进,而 JDK 21 是一个成熟的 LTS 版本。

整个教程统一使用一个版本,可以:

  • 保证代码一致;
  • 避免版本差异干扰基础学习;
  • 建立稳定知识体系。

等 JavaSE 基础建立以后,再学习版本差异会容易得多。


6.5 学 Java 需要背所有版本发布时间吗?

不需要。

你需要记住的是:

  • Java 诞生于 1990 年代;
  • Sun 是 Java 的早期创造者;
  • James Gosling 是核心设计者;
  • Oracle 后来收购 Sun;
  • Java 一直持续演进;
  • Java 8、11、17、21、25 是重要 LTS 节点;
  • 本教程使用 JDK 21。

具体月份和所有非 LTS 版本没有必要死记硬背。


6.6 Java 为什么特别适合大型项目?

并不是因为某一个单独特性。

而是多种能力共同作用:

  • 静态类型系统;
  • 面向对象;
  • 丰富标准库;
  • 成熟工具链;
  • JVM;
  • 自动内存管理;
  • 多线程能力;
  • 长期兼容性;
  • 大型第三方生态。

大型工程能力来自整个体系,而不是某一个关键字。


七、练习与验收

7.1 知识问答

  1. Java 是什么?请分别从“语言、平台、生态”三个角度回答。
  2. Java 与 Sun Microsystems、Oracle、James Gosling 分别是什么关系?
  3. Java 为什么能够长期用于企业软件开发?至少从四个角度说明。
  4. Java SE、Java EE / Jakarta EE、Java ME 分别解决什么问题?
  5. Java EE 与 Jakarta EE 是什么关系?
  6. 什么是 LTS?为什么企业项目通常更关注 LTS?
  7. 为什么本教程选择 JDK 21,而不是要求始终追逐最新 Java 版本?
  8. “Java 是纯面向对象语言”这个说法是否严谨?请说明理由。

7.5 综合训练

请不查看正文,在纸上画出你理解的 Java 技术体系,至少包含:

Java
Java Language
Java SE
JDK
JVM
Java EE / Jakarta EE
Java ME

然后用箭头或文字说明它们之间的关系。

要求:

  • 不能只是把名词排成一列;
  • 必须体现“语言、平台、工具、生态”的区别;
  • 完成后再回到教程检查遗漏。

7.6 本章验收

如果你能够在不查看资料的情况下完成下面这些任务,本章即可认为基本掌握:

  • [ ] 用 2~3 分钟完整介绍 Java 是什么。
  • [ ] 说明 Java 的诞生背景以及 Sun、Oracle、James Gosling 的关系。
  • [ ] 解释 Java SE、Jakarta EE、Java ME 的区别。
  • [ ] 解释为什么 JavaSE 是后续 Java 技术学习的基础。
  • [ ] 说明 LTS 的意义以及本教程为什么选择 JDK 21。
  • [ ] 画出一张 Java 技术体系关系图,而不是只背几个定义。