Java JDK 全面知识总结

82 阅读3分钟

🌟 Java JDK 全面知识总结


1️⃣ JDK、JRE、JVM 的关系

名称作用包含内容
JVMJava 虚拟机,负责加载和运行字节码只负责运行
JREJava 运行环境,能运行 Java 程序JVM + 标准类库
JDKJava 开发工具包,能开发和运行 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 的主要开发工具 🛠️

工具名作用说明
javacJava 编译器(.java → .class)
javaJava 程序启动器
javadoc文档生成器(API 文档)
jar打包/解包工具
jdb调试器
javap反汇编工具
jconsoleJVM 监控
jpsJava 进程查看
jstack线程堆栈分析
jstatJVM 统计信息
jinfoJVM 配置信息
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 的工作流程 🚀

  1. 编写 .java 源文件
  2. javac 编译为 .class 字节码
  3. java 命令运行,JVM 加载并执行
  4. 可用 jar 打包、javadoc 生成文档、jdb 调试等

6️⃣ JAVA_HOME 的作用 🏠

  • JAVA_HOME 是一个环境变量,指向 JDK 安装目录
  • 让开发工具(如 Maven、Gradle、IDEA、命令行)能自动找到 JDK
  • %JAVA_HOME%\bin 加入 PATH,可在任意目录下用 javajavac 等命令

7️⃣ IDEA Project SDK vs 命令行 SDK 🤔

场景用途影响
IDEA Project SDK控制 IDEA 内编译、运行、调试用的 JDK影响 IDE 里运行和调试
命令行 SDKJAVA_HOMEPATH 控制影响终端下编译、运行、打包

建议:
两者最好保持一致,避免“IDEA 运行正常,命令行报错”或反之。


8️⃣ JDK 版本与发行商

  • 主流发行商:Oracle JDK、OpenJDK、Adoptium Temurin、Amazon Corretto 等
  • LTS 版本:JDK 8、11、17、21
  • 发行商间核心功能一致,细节和授权略有不同

9️⃣ 常见 JDK 问题与排查 🕵️

  • JDK 版本不一致:IDEA 和命令行 JDK 不同,易出兼容性问题
  • 依赖冲突:Maven 项目中不同依赖引入了不同版本的库,易出错
  • JDK 供应商差异:不同发行商细节略有不同
  • 环境变量未配置:未正确设置 JAVA_HOMEPATH,命令行无法识别命令

🔟 典型理解总结

  • JDK:让你能编译、运行、调试、打包 Java 程序的“工具箱” 🧰
  • JAVA_HOME:让系统和开发工具能方便地找到 JDK
  • 标准类库:让 Java 程序能直接用到各种基础功能
  • IDEA Project SDK 和命令行 SDK:分别控制 IDE 和终端下的 JDK 版本,建议保持一致

一句话总结:
JDK = JRE + 开发工具,JRE = JVM + 标准类库。JDK 是 Java 开发的基础,理解其结构和环境变量配置,是每个 Java 开发者的必备技能! 🚀