第 2 章:JDK 安装与环境变量
学习目标
- 理解 JDK、JRE、JVM 的区别
- 在 Windows / macOS / Linux 三平台任选其一安装 JDK 17
- 配置环境变量,验证安装成功
一、必知必会:JDK、JRE、JVM 三者关系
在开始安装前,先搞清楚三个概念:
一句话总结:
- JVM:运行 Java 字节码的"虚拟计算机"
- JRE:JVM + 运行所需类库(用户装这个就能跑 Java 程序)
- JDK:JRE + 开发工具(开发者装这个能编译 + 运行)
本教程装 JDK 即可,因为它包含了 JRE 和 JVM。
三种 JDK 发行版的区别
| 发行版 | 维护方 | 协议 | 推荐场景 |
|---|---|---|---|
| Oracle JDK | Oracle | 商业(个人免费) | 商业项目(需付费) |
| OpenJDK | 社区 | GPL + Classpath | ⭐ 首选(免费 + 主流) |
| Eclipse Temurin | Adoptium | GPL | 跨平台稳定性好 |
| Azul Zulu | Azul | GPL | 老版本 JDK 兼容 |
| Microsoft JDK | Microsoft | GPL | Windows 优化 |
本教程统一使用 Eclipse Temurin 17——它是 Adoptium 维护的 OpenJDK 发行版,企业项目首选之一。
二、为什么选 Java 17?
| 版本 | LTS | 关键特性 | 推荐度 |
|---|---|---|---|
| Java 8 | ✅ | Lambda、Stream、Optional | 老项目主力 |
| Java 11 | ✅ | var、HTTP Client | 过渡版本 |
| Java 17 | ✅ | Sealed Class、Pattern Matching、Records | ⭐ 当前首选 |
| Java 21 | ✅ | Virtual Thread(虚拟线程) | 新项目可考虑 |
为什么选 17 而不是 21:
- 生态成熟:SpringBoot 3.x 主流支持版本,所有第三方库都已稳定
- 企业主流:80% 新项目仍在用 17
- 学习资源丰富:文档、博客、stackoverflow 答案最多
- 生产稳定:已发布 4 年,所有已知 bug 都已修复
三、Windows 平台安装(推荐)
步骤 1:下载 JDK
- 打开 Eclipse Temurin 官网
- 选择:
- Version: 17 - LTS
- Operating System: Windows
- Architecture: x64
- Package Type: JDK
- Download
下载得到类似 OpenJDK17U-jdk_x64_windows_hotspot_17.0.13_11.msi 的安装包。
步骤 2:运行安装程序
为什么用 .msi 而不是 .zip?
.msi安装器会自动配置 PATH 和文件关联.zip需要手动配置,更适合高级用户或服务器部署
双击 .msi 文件,按照向导操作:
┌─────────────────────────────────────┐
│ Eclipse Temurin JDK Setup │
├─────────────────────────────────────┤
│ ☑ I accept the terms... │ ← 勾选接受许可
│ │
│ [Next >] │
└─────────────────────────────────────┘步骤 3:自定义安装选项(重要!)
┌─────────────────────────────────────┐
│ Custom Setup │
├─────────────────────────────────────┤
│ ☑ JavaSoft (JDK) │ ← 必须勾选
│ ☑ Add to PATH │ ← ① 关键:自动加入 PATH
│ ☑ Associate .jar │ ← 可选:jar 文件关联
│ │
│ Install directory: │
│ C:\Program Files\Eclipse Adoptium\ │ ← ② 默认安装路径,建议记住
│ jdk-17.0.13.11-hotspot\ │
│ │
│ [Next >] │
└─────────────────────────────────────┘① "Add to PATH" 选项让安装器自动把
java.exe所在目录加到 PATH,这样你在任何目录下输入java都能执行。
步骤 4:配置 JAVA_HOME(关键步骤)
为什么需要 JAVA_HOME?
很多工具(IDE、Maven、Gradle、Tomcat)需要找 JDK 的安装目录。它们会读环境变量 JAVA_HOME 来定位。 不配置 JAVA_HOME 会导致后续工具找不到 JDK。
图形界面配置法
- 右键 此电脑 → 属性 → 高级系统设置 → 环境变量
- 在 系统变量(不是用户变量)下点 新建:
变量名:JAVA_HOME
变量值:C:\Program Files\Eclipse Adoptium\jdk-17.0.13.11-hotspot- 在 系统变量 里找到 Path,双击编辑:
┌──────────────────────────────────────────┐
│ Path │
├──────────────────────────────────────────┤
│ %JAVA_HOME%\bin ← ① 新增 │
│ %JAVA_HOME%\lib ← ② 新增 │
│ C:\Windows\system32 │
│ ... 其他已有路径 ... │
└──────────────────────────────────────────┘命令行快速配置法(PowerShell)
# 以管理员身份运行 PowerShell,然后执行:
# 设置 JAVA_HOME(替换为你的实际路径)
[Environment]::SetEnvironmentVariable(
"JAVA_HOME",
"C:\Program Files\Eclipse Adoptium\jdk-17.0.13.11-hotspot",
"Machine"
)
# 在 PATH 中追加 %JAVA_HOME%\bin
$currentPath = [Environment]::GetEnvironmentVariable("Path", "Machine")
[Environment]::SetEnvironmentVariable(
"Path",
"$currentPath;%JAVA_HOME%\bin",
"Machine"
)
# 刷新环境变量(或者关闭当前终端重新打开)
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine")步骤 5:验证安装
打开 新的 命令行窗口(旧的窗口不会加载新环境变量),执行:
# ① 检查 Java 编译器
javac -version
# 期望输出:javac 17.0.13
# ② 检查 Java 运行时
java -version
# 期望输出:
# openjdk version "17.0.13" 2024-01-16
# OpenJDK Runtime Environment Temurin-17.0.13+9 (build 17.0.13+9)
# OpenJDK 64-Bit Server VM Temurin-17.0.13+9 (build 17.0.13+9, mixed mode, sharing)
# ③ 检查 JAVA_HOME 是否生效
echo %JAVA_HOME%
# 期望输出:C:\Program Files\Eclipse Adoptium\jdk-17.0.13.11-hotspot验证失败怎么办?
- "javac 不是内部命令":说明 PATH 没配对。检查
%JAVA_HOME%\bin是否在 PATH 里- "java 与 javac 版本不一致":说明 PATH 里有别的 JDK 在前面。把它移到
%JAVA_HOME%\bin后面- 重启电脑再试一次(环境变量有时需要重启才能生效)
四、macOS 平台安装(推荐 Homebrew)
步骤 1:检查是否已装 Homebrew
# 没装的话,去 https://brew.sh/ 按官方指引安装
brew --version
# 期望输出:Homebrew 4.x.x步骤 2:安装 Temurin 17
# 推荐:用 Homebrew Cask 装 Temurin
brew install --cask temurin@17
# 如果不需要 GUI,直接装 OpenJDK 17
brew install openjdk@17步骤 3:配置 JAVA_HOME(macOS 特有)
macOS 的特殊性
macOS 的 bash/zsh 启动顺序:/etc/profile → ~/.bash_profile → ~/.zshrc 环境变量推荐放在 ~/.zshrc(macOS Catalina 之后默认 shell 是 zsh)
根据你使用的 shell 选择对应配置文件:
# 如果用 bash(macOS Mojave 及之前)
echo 'export JAVA_HOME=$(/usr/libexec/java_home -v 17)' >> ~/.bash_profile
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bash_profile
source ~/.bash_profile
# 如果用 zsh(macOS Catalina 及之后)
echo 'export JAVA_HOME=$(/usr/libexec/java_home -v 17)' >> ~/.zshrc
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.zshrc
source ~/.zshrc
/usr/libexec/java_home -v 17这个命令会自动找到版本最高的 Java 17 安装位置。
步骤 4:验证安装
# ① 检查 javac
javac -version
# 期望输出:javac 17.0.13
# ② 检查 java
java -version
# 期望输出:openjdk version "17.0.13"
# ③ 检查 JAVA_HOME
echo $JAVA_HOME
# 期望输出:/Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home
# ④ 检查所有已安装的 Java 版本(macOS 特有)
/usr/libexec/java_home -V
# 会列出所有 JDK 安装位置可选:使用 jenv 管理多版本 JDK
如果你需要在多个 Java 版本之间切换(如 Java 8、11、17、21),推荐 jenv:
brew install jenv
echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(jenv init -)"' >> ~/.zshrc
# 注册已安装的 JDK
jenv add /Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home
# 查看已注册版本
jenv versions
# 在当前目录使用 Java 17
jenv local 17五、Linux 平台安装(推荐 SDKMAN!)
步骤 1:使用 SDKMAN! 管理 JDK(最灵活)
SDKMAN! 是 JVM 生态的版本管理工具,类似于 Node.js 的 nvm,但更强大。
# 安装 SDKMAN!
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
# 安装 Temurin 17
sdk install java 17.0.13-tem
# 验证
java -version
# 期望输出:openjdk version "17.0.13"步骤 2:使用 apt/yum 直接安装(Ubuntu/CentOS)
# Ubuntu/Debian
sudo apt update
sudo apt install openjdk-17-jdk
# CentOS/RHEL
sudo yum install java-17-openjdk-devel
# 验证
java -version
javac -version
# 配置 JAVA_HOME
echo 'export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))' >> ~/.bashrc
source ~/.bashrc步骤 3:验证安装
# ① 检查 javac
javac -version
# ② 检查 java
java -version
# ③ 检查 JAVA_HOME
echo $JAVA_HOME六、环境变量到底是怎么生效的?
展开:环境变量底层原理(适合好奇的同学)
当你在命令行输入 javac 时,操作系统会按以下顺序查找:
- 当前目录:先看
./javac是否存在 - PATH 变量:按
:(Linux/macOS)或;(Windows)分隔的顺序,逐个目录查找javac.exe(Windows)或javac(Linux/macOS) - 找到第一个就执行
所以 PATH 里路径的顺序很重要:
- ❌ 错误顺序:旧 JDK 在前,新 JDK 在后 → 用的是旧版本
- ✅ 正确顺序:新 JDK 在前,旧 JDK 在后 → 用的是新版本
而 JAVA_HOME 是约定,很多工具会主动读取这个变量来找 JDK 位置。如果不配,工具就不知道 JDK 在哪。
七、IDE 选择与配置
强烈推荐使用 IntelliJ IDEA,有 Community(免费)和 Ultimate(付费)两个版本。
| 版本 | 价格 | 功能 | 推荐场景 |
|---|---|---|---|
| Community | 免费 | Java / Kotlin / Android / 基础 Web | ⭐ 本教程使用 |
| Ultimate | 5,990 元/年 | Spring / 数据库 / Web 全套 | 企业项目 |
下载与安装
- 访问 JetBrains 官网
- 下载 Community Edition
- 安装后第一次启动会让你选择主题、装插件
必备配置
打开 Settings (Windows: Ctrl + , / macOS: ⌘ + ,):
1. 外观:Appearance & Behavior → Appearance → Theme: Darcula (深色) 或 IntelliJ Light
2. 编辑器:Editor → Font → Size: 14, Line height: 1.5
3. 编码:Editor → File Encodings →
Global Encoding: UTF-8
Project Encoding: UTF-8
Default encoding for properties: UTF-8
4. 自动导入:Editor → General → Auto Import →
☑ Optimize imports on the fly
☑ Add unambiguous imports on the fly
5. 代码风格:Editor → Code Style → Java →
Tab/Indent: Tab size = 4, Indent = 4, Continuation indent = 8推荐安装的插件
在 Settings → Plugins 中搜索安装:
- Alibaba Java Coding Guidelines:阿里规约实时检查
- SonarLint:代码质量检查
- Rainbow Brackets:彩虹括号
- Translation:翻译选中文字
- GitToolBox:Git 状态增强
- Lombok:简化样板代码(教程后期会用到)
- MyBatisX:MyBatis 跳转(教程后期会用到)
八、常见问题排查
Q1: java 命令可用,但 javac 不可用?
原因:%JAVA_HOME%\bin 没加到 PATH,或者只加了 JRE 路径。
解决:检查 PATH 里有没有 %JAVA_HOME%\bin(不是 %JAVA_HOME%\jre\bin)。
Q2: 命令行显示的是旧版本(如 Java 8)
原因:PATH 里多个 JDK 路径,顺序不对。
解决:
# Linux/macOS 查看 PATH 顺序
echo $PATH | tr ':' '\n' | head -5
# Windows 查看 PATH
echo %PATH% | tr ';' '\n' | head -5把要用的 JDK 路径移到最前面。
Q3: 安装后命令行窗口要重启?
原因:环境变量在 进程启动时 加载,已经打开的窗口不会重新加载。
解决:关闭所有命令行窗口,重新打开一个。
Q4: macOS 上提示 "cannot be opened because it is from an unidentified developer"
原因:macOS Gatekeeper 安全策略。
解决:
# 临时绕过(不推荐)
# 系统设置 → 隐私与安全 → 仍要打开
# 或删除隔离属性
sudo xattr -r -d com.apple.quarantine /Library/Java/JavaVirtualMachines/temurin-17.jdk九、本章小结
| 步骤 | 关键 |
|---|---|
| 选 JDK | Eclipse Temurin 17(OpenJDK 发行版) |
| Windows | 下载 msi 安装器,勾选 Add to PATH |
| 配置 JAVA_HOME | 系统变量(不是用户变量),值为 JDK 安装目录 |
| PATH 配置 | %JAVA_HOME%\bin 必须在最前面 |
| macOS | 推荐 Homebrew 或 SDKMAN! |
| Linux | 推荐 SDKMAN! 或 apt/yum |
| IDE | IntelliJ IDEA Community(免费) |
动手练习
- 三平台验证:如果你能切换三台电脑(或虚拟机),分别完成 Windows、macOS、Linux 的安装
- 多版本并存:尝试同时安装 Java 8 和 Java 17,学会切换版本
- IDE 配置:下载并配置 IntelliJ IDEA Community,安装上面推荐的 5 个插件
- 环境检查脚本:写一个脚本(Windows bat / Linux shell),自动检查 Java 安装并打印版本信息
参考脚本:check-java.sh(Linux/macOS)
#!/bin/bash
# ============================================
# Java 环境检查脚本
# ============================================
# 用法:chmod +x check-java.sh && ./check-java.sh
# 作用:检查 JDK 是否正确安装并打印详细信息
echo "=== Java 环境检查 ==="
echo ""
# ① 检查 java 命令是否存在
if command -v java &> /dev/null; then
echo "[✓] java 命令存在"
java -version
else
echo "[✗] java 命令不存在,请检查 PATH"
exit 1
fi
echo ""
# ② 检查 javac 命令是否存在
if command -v javac &> /dev/null; then
echo "[✓] javac 命令存在"
javac -version
else
echo "[✗] javac 命令不存在,可能是只装了 JRE"
echo " 请安装 JDK 而不是 JRE"
exit 1
fi
echo ""
# ③ 检查 JAVA_HOME
if [ -n "$JAVA_HOME" ]; then
echo "[✓] JAVA_HOME = $JAVA_HOME"
else
echo "[!] JAVA_HOME 未设置"
echo " 部分工具(IDE/Maven)可能找不到 JDK"
fi
echo ""
# ④ 检查 java 和 javac 版本是否一致
JAVA_VER=$(java -version 2>&1 | awk -F\" '/version/{print $2}')
JAVAC_VER=$(javac -version 2>&1 | awk '{print $2}')
echo "java 版本: $JAVA_VER"
echo "javac 版本: $JAVAC_VER"
if [ "$JAVA_VER" == "$JAVAC_VER" ]; then
echo "[✓] java 和 javac 版本一致"
else
echo "[!] 版本不一致,建议检查 PATH 中 JDK 顺序"
fi
echo ""
echo "=== 检查完成 ==="推荐阅读
- 🌐 Eclipse Temurin 官方下载
- 🌐 SDKMAN! 多版本管理
- 🌐 jenv macOS 多版本管理
- 📖 《深入理解 Java 虚拟机》第 3 章 — 讲 JDK 结构
下一章:第 3 章:第一个 Hello World →
你已经完成了:
- ✅ 理解 JDK / JRE / JVM 关系
- ✅ 安装 Temurin 17
- ✅ 配置 JAVA_HOME 和 PATH
- ✅ 安装并配置 IntelliJ IDEA Community
- ✅ 写了一个环境检查脚本