Java 简介与历史发展
本教程共 100 篇 · 第 1 篇 · 更新于 2026-08-05 · 约 5 分钟阅读
本节目标:搞清 Java 是什么、从哪来、凭什么能跨平台,并认识全书统一使用的版本 Java 25 LTS。
Java 到底是什么
很多人第一次听说 Java,以为它只是一门编程语言。
准确说,Java 是「一门语言 + 一个平台」。语言部分是你写的那些 class、if、for;平台部分是运行这些代码的虚拟机和一整套标准类库。
两者缺一不可。你写的 .java 文件本身不能运行,得先变成字节码,再交给虚拟机执行。
这个设计是 Java 最核心的特征,后面几节会反复用到。
从 Oak 到 Java:一次改名换来的运气
时间回到 1990 年代初。Sun 公司(后被 Oracle 收购)的 James Gosling 带队做了一门新语言,起名 Oak(橡树)。
它最初的目标很小众:给机顶盒、烤面包机这类家电写嵌入式程序。市场反应平平,项目差点被砍。
转机来自互联网。网页需要一种能在各种机器上都跑得动的程序,Oak 的「跨平台」特性正好对上。
1995 年,Sun 把它重新包装发布。因为 Oak 这个商标已被人注册,只好换名——就是我们熟悉的 Java。
Gosling 也因此被称作「Java 之父」。
编译型、解释型,Java 走的是第三条路
要理解 Java 为什么能跨平台,得先看看另外两派怎么做。
编译型语言(C、C++)把源码直接编译成机器码。机器码是 CPU 能直接读的指令,跑得快,但换个平台就得重新编译一份——x86 和 ARM 的指令集根本不一样。
解释型语言(Python、Ruby)不编译,由解释器逐行读源码执行。换平台不用改代码,代价是运行慢。
Java 选了中间路线:先把源码编译成一种叫字节码的中间格式,再由各平台自己的虚拟机去执行。
Hello.java ── javac 编译 ──▶ Hello.class(字节码)
│
┌───────────────┼───────────────┐
▼ ▼ ▼
Windows 的 JVM Linux 的 JVM macOS 的 JVM
字节码好比「世界语」,JVM 好比各国的翻译官。你只写一份世界语稿子,翻译官负责讲成当地话。
这就是那句著名口号的由来:Write Once, Run Anywhere(一次编写,到处运行)。
Note跨平台是对写代码的人说的。虚拟机本身需要为每个平台单独开发,这活儿 Oracle 和各 JDK 发行方替我们干了。
向下兼容:Java 生命力的真正来源
Sun 当年制定了一整套《Java 虚拟机规范》,规定字节码长什么样、怎么执行。
任何公司想做自己的 JVM,都得照这份规范来。这保证了同一个 .class 文件在不同厂商的虚拟机上行为一致。
实践中 JVM 的兼容性经得起验证:低版本编译出的字节码,可以直接跑在高版本 JVM 上。
十年前编译的 jar 包扔进 Java 25 LTS 的环境里,大概率照样能跑。这种稳定性是 Java 在企业里长期不倒的关键原因。
Java SE、Java EE、Java ME 的分工
Java 发展中期分出了三个版本,名字很容易搞混:
| 版本 | 全称 | 定位 |
|---|---|---|
| Java SE | Standard Edition | 标准版,语言核心 + 标准类库 + 标准 JVM |
| Java EE | Enterprise Edition | 企业版,在 SE 基础上加 Web、数据库、消息等 API |
| Java ME | Micro Edition | 嵌入式「瘦身版」,类库和虚拟机都被裁剪过 |
三者的关系可以这么记:
┌───────────────────────────┐
│ Java EE │
│ ┌────────────────────┐ │
│ │ Java SE │ │
│ │ ┌─────────────┐ │ │
│ │ │ Java ME │ │ │
│ │ └─────────────┘ │ │
│ └────────────────────┘ │
└───────────────────────────┘
Java EE 用的虚拟机和 Java SE 完全相同,只是多了一堆库。Spring 这些框架都长在这个生态上。
Java ME 情况不同,它是裁剪版,SE 的标准库在上面用不了。移动端最终被 Android 拿下,ME 基本退出了历史舞台,初学者不必碰。
TipJava EE 在 2017 年被 Oracle 捐给 Eclipse 基金会,改名 Jakarta EE,包名也从
javax.*换成了jakarta.*。看到这两个名字,知道是同一条线就行。
Java SE 是整个平台的地基,这本教程讲的全是 Java SE。
版本演进:从 1.0 到 25
Java 从 1996 年发布 1.0,至今三十年。几个真正改变写法的节点值得记住:
| 版本 | 年份 | 标志性变化 |
|---|---|---|
| 1.0 | 1996 | 首个公开版本 |
| 5.0 | 2004 | 泛型、注解、枚举、增强 for |
| 8 | 2014 | Lambda、Stream、Optional,现代 Java 的起点 |
| 9 | 2017 | 模块化、jshell、集合工厂方法 |
| 11 | 2018 | LTS,标准 HTTP Client,单文件源码直接运行 |
| 17 | 2021 | LTS,密封类正式,record 与模式匹配落地 |
| 21 | 2023 | LTS,虚拟线程、switch 模式匹配 |
| 25 | 2025 | LTS,本教程基线 |
从 Java 9 开始,发布节奏改成每 6 个月一个特性版(每年 3 月和 9 月各一次)。
从 Java 17 起,每两年的 9 月版本是 LTS(长期支持版):17 → 21 → 25 → 29……
非 LTS 版本只维护半年左右,玩玩新特性可以,生产环境不会用。
为什么本教程用 Java 25 LTS
写这本教程时,最新发布版是 Java 26(2026 年 3 月),但它不是 LTS。
Java 25 于 2025 年 9 月发布,商业支持到 2030 年,是当下企业的主流选择。学它性价比最高:语法足够现代,生态足够成熟,找工作也对得上。
后面章节里凡是 Java 8 之后引入的语法(var、record、文本块、switch 表达式等),我都会标注引入版本,方便你判断老项目能不能用。
Warning网上很多 Java 教程还停留在 Java 8 的写法。不是说 Java 8 不对,而是有些写法已经有更清爽的替代品。遇到差异时以本教程的 Java 25 LTS 写法为准,我会在旁边附上「历史兼容」对照。
小结
Java 是「语言 + 平台」的组合,源码先编译成字节码,再由 JVM 执行,这是它跨平台的根本原因。
它 1995 年由 Sun 公司发布,前身叫 Oak,之父是 James Gosling。
Java SE 是核心地基,Java EE(现 Jakarta EE)是企业级扩展,Java ME 已基本退场。
版本上每半年一个特性版、每两年一个 LTS,本教程统一以 Java 25 LTS 为准。