🌟 Java JDK 全面知识总结
1️⃣ JDK、JRE、JVM 的关系
| 名称 | 作用 | 包含内容 |
|---|---|---|
| JVM | Java 虚拟机,负责加载和运行字节码 | 只负责运行 |
| JRE | Java 运行环境,能运行 Java 程序 | JVM + 标准类库 |
| JDK | Java 开发工具包,能开发和运行 Java 程序 | JRE + 开发工具 |
关系图:
JDK = JRE + 开发工具
JRE = JVM + 标准类库
2️⃣ JDK 目录结构一览
JDK/
├─ bin/ # 可执行工具(java、javac、jar、javadoc 等)
├─ lib/ # 标准类库(jar 包、模块等)
├─ include/ # C/C++ 头文件(JNI 用)
├─ jmods/ # JDK 9+ 模块文件
├─ conf/ # 配置文件(JDK 9+)
├─ src.zip # 标准库源码
3️⃣ JDK 的主要开发工具 🛠️
| 工具名 | 作用说明 |
|---|---|
| javac | Java 编译器(.java → .class) |
| java | Java 程序启动器 |
| javadoc | 文档生成器(API 文档) |
| jar | 打包/解包工具 |
| jdb | 调试器 |
| javap | 反汇编工具 |
| jconsole | JVM 监控 |
| jps | Java 进程查看 |
| jstack | 线程堆栈分析 |
| jstat | JVM 统计信息 |
| jinfo | JVM 配置信息 |
| jmap | 内存分析 |
| keytool | 密钥/证书管理 |
| jcmd | 多功能诊断工具 |
| jshell | 交互式命令行(JDK 9+) |
4️⃣ 标准类库都有哪些?📚
JRE 的标准类库(Java SE API)涵盖:
- java.lang:基础语言(Object、String、System、Thread…)
- java.util:集合、工具类(List、Map、Date…)
- java.io / java.nio:文件与流
- java.net:网络编程
- java.sql:数据库访问
- java.time:日期时间(JDK 8+)
- java.security:安全加密
- java.text:文本格式化
- java.util.concurrent:并发工具
- javax.*(JDK 8 及以前):扩展库(如 XML、管理、加密等)
作用:
这些类库为 Java 程序提供了开发所需的各种基础能力,无需额外引入第三方库。
5️⃣ JDK 的工作流程 🚀
- 编写
.java源文件 - 用
javac编译为.class字节码 - 用
java命令运行,JVM 加载并执行 - 可用
jar打包、javadoc生成文档、jdb调试等
6️⃣ JAVA_HOME 的作用 🏠
JAVA_HOME是一个环境变量,指向 JDK 安装目录- 让开发工具(如 Maven、Gradle、IDEA、命令行)能自动找到 JDK
- 把
%JAVA_HOME%\bin加入PATH,可在任意目录下用java、javac等命令
7️⃣ IDEA Project SDK vs 命令行 SDK 🤔
| 场景 | 用途 | 影响 |
|---|---|---|
| IDEA Project SDK | 控制 IDEA 内编译、运行、调试用的 JDK | 影响 IDE 里运行和调试 |
| 命令行 SDK | 由 JAVA_HOME 和 PATH 控制 | 影响终端下编译、运行、打包 |
建议:
两者最好保持一致,避免“IDEA 运行正常,命令行报错”或反之。
8️⃣ JDK 版本与发行商
- 主流发行商:Oracle JDK、OpenJDK、Adoptium Temurin、Amazon Corretto 等
- LTS 版本:JDK 8、11、17、21
- 发行商间核心功能一致,细节和授权略有不同
9️⃣ 常见 JDK 问题与排查 🕵️
- JDK 版本不一致:IDEA 和命令行 JDK 不同,易出兼容性问题
- 依赖冲突:Maven 项目中不同依赖引入了不同版本的库,易出错
- JDK 供应商差异:不同发行商细节略有不同
- 环境变量未配置:未正确设置
JAVA_HOME或PATH,命令行无法识别命令
🔟 典型理解总结
- JDK:让你能编译、运行、调试、打包 Java 程序的“工具箱” 🧰
- JAVA_HOME:让系统和开发工具能方便地找到 JDK
- 标准类库:让 Java 程序能直接用到各种基础功能
- IDEA Project SDK 和命令行 SDK:分别控制 IDE 和终端下的 JDK 版本,建议保持一致
一句话总结:
JDK = JRE + 开发工具,JRE = JVM + 标准类库。JDK 是 Java 开发的基础,理解其结构和环境变量配置,是每个 Java 开发者的必备技能! 🚀