生动的比喻:盖房子
想象一下你要盖一栋房子:

-
JDK (Java Development Kit - Java开发工具包):相当于“建筑工地的全套工具和材料”。
- 工具:包括锤子、电钻、扳手、卷尺、水平仪等(对应编译器
javac、调试器jdb、文档生成工具javadoc等)。 - 材料:包括钢筋、水泥、砖块、玻璃等(对应Java类库API,如
java.lang,java.util等)。 - 图纸:建筑规范和蓝图(对应Java语言规范和JVM规范)。
- 总包工头:能够指挥工人,使用工具,将材料建成房子(对应
java命令,可以运行编译后的代码)。 - JDK是给开发者用的,他们需要这些工具来编写、编译、调试和运行Java程序。
- 工具:包括锤子、电钻、扳手、卷尺、水平仪等(对应编译器
-
JRE (Java Runtime Environment - Java运行时环境):相当于“已经建好的毛坯房”。
- 基础设施:房子的地基、承重墙、水电管线、门窗等(对应JVM和核心类库)。
- 功能:你可以住在里面,打开灯(运行程序),使用插座(调用API),但你不能拆墙或者自己盖新房间(不能修改或编译代码)。
- JRE是给普通用户或运维人员用的,他们只需要运行已经开发好的Java程序(比如玩一个Java游戏,或者运行一个企业级应用),而不需要关心程序是如何被创建出来的。
核心区别总结
| 特性 | JDK (Java Development Kit) | JRE (Java Runtime Environment) |
|---|---|---|
| 全称 | Java Development Kit | Java Runtime Environment |
| 定位 | 开发工具包 | 运行时环境 |
| 使用者 | 程序员/开发者 | 普通用户/运维人员 |
| 主要功能 | 用于开发、编译、调试和运行Java程序 | 仅用于运行Java程序 |
| 包含关系 | 包含JRE,以及开发工具(如编译器) | 被JDK包含,是运行Java程序所必需的环境 |
| 核心组件 | - JRE - 编译器 ( javac)- 调试器 ( jdb)- 文档生成器 ( javadoc)- 打包工具 ( jar) |
- JVM (Java虚拟机) - Java核心类库 (APIs) |
| 简单记忆 | JDK = JRE + 开发工具 | JRE = JVM + Java类库 |
技术细节拆解
JDK (Java开发工具包)
JDK是Java开发的核心,它是一个完整的软件开发套件,当你下载并安装了JDK后,你就拥有了开发和运行Java程序所需的一切。
JDK的主要组成部分包括:

- JRE (Java运行时环境):这是JDK的基础,没有它,编译后的代码也无法运行。
- 开发工具:这是JDK与JRE最关键的区别所在。
- 编译器 (
javac.exe):这是最重要的工具,它将程序员写的、人类可读的.java源代码文件,翻译成机器(JVM)可执行的.class字节码文件。 - 打包工具 (
jar.exe):将多个.class文件和资源文件打包成一个.jar文件,便于分发和管理。 - 文档生成工具 (
javadoc.exe):从你的源代码注释中自动生成API文档。 - 调试器 (
jdb.exe/ IDE内置):用于帮助开发者查找和修复代码中的错误。 java.exe命令:用于启动JVM,加载并运行你的.class字节码文件。
- 编译器 (
如果你要写Java代码,你必须安装JDK。
JRE (Java运行时环境)
JRE是Java程序运行的“舞台”,一个Java程序(通常是 .jar 文件或 .class 文件)要被执行,必须依赖于JRE。
JRE的主要组成部分包括:
- JVM (Java虚拟机):这是Java跨平台的核心,JVM是一个抽象的虚拟计算机,它负责在特定的操作系统(如Windows, Linux, macOS)上执行Java字节码,JVM会读取你的
.class文件,并将其解释或编译成当前操作系统能理解的本地机器码来执行。 - Java核心类库 (Java Class Libraries / APIs):这是一系列预先编写好的、功能丰富的代码包(如
java.lang,java.io,java.net等),你的Java程序在运行时,会调用这些库中的类和方法来实现功能(进行网络连接、文件读写、创建数据结构等),你可以把它理解为一个巨大的“工具箱”。
如果你只是想运行一个Java程序(比如一个游戏或软件),你只需要安装JRE。 (注意:从Java 11开始,Oracle已经不再单独提供JRE的下载,JRE的功能被整合到了JDK中,但为了理解概念,这个区分依然非常重要。)
一个简单的流程来理解它们的关系
-
开发阶段:
- 程序员使用JDK中的文本编辑器或IDE(如IntelliJ IDEA, Eclipse)编写
HelloWorld.java源文件。 - 程序员使用JDK中的编译器
javac来编译HelloWorld.java,生成HelloWorld.class字节码文件。
- 程序员使用JDK中的文本编辑器或IDE(如IntelliJ IDEA, Eclipse)编写
-
运行阶段:
- 程序员或用户使用JDK中包含的
java命令(这个命令本身就在JRE环境中运行)来执行HelloWorld.class。 - JRE被激活。
- JRE中的JVM加载
HelloWorld.class文件。 - JRE中的Java核心类库被调用(
System.out.println)。 - JVM将字节码翻译成当前操作系统能执行的指令,最终在屏幕上打印出 "Hello, World!"。
- 程序员或用户使用JDK中包含的
现代Java的演变(重要补充)
从 Java 9 开始,Oracle对JDK的模块结构进行了重大重构,引入了 JPMS (Java Platform Module System)。
从 Java 11 开始,Oracle官方的JDK安装包中不再包含单独的JRE,JDK本身就是完整的运行时环境,这意味着:
- 现在你只需要下载并安装JDK,它已经包含了运行Java程序所需的一切。
jre目录的概念在JDK安装目录中逐渐淡化。- 这种变化简化了部署,因为开发者不再需要区分是安装JDK还是JRE。对于开发者来说,安装JDK是唯一的选择。
尽管在现代JDK中JRE作为一个独立的概念和安装包已经弱化,但 JDK和JRE在功能上的核心区别——开发工具 vs. 运行环境——依然是理解Java平台工作原理的基础。 你可以把现代的JDK看作是“包含了所有开发和运行功能的完整工具箱”。
