Skip to content
第 2 / 250 章后端⏱ 10 分钟阅读

第 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 JDKOracle商业(个人免费)商业项目(需付费)
OpenJDK社区GPL + Classpath首选(免费 + 主流)
Eclipse TemurinAdoptiumGPL跨平台稳定性好
Azul ZuluAzulGPL老版本 JDK 兼容
Microsoft JDKMicrosoftGPLWindows 优化

本教程统一使用 Eclipse Temurin 17——它是 Adoptium 维护的 OpenJDK 发行版,企业项目首选之一。

二、为什么选 Java 17?

版本LTS关键特性推荐度
Java 8Lambda、Stream、Optional老项目主力
Java 11var、HTTP Client过渡版本
Java 17Sealed Class、Pattern Matching、Records⭐ 当前首选
Java 21Virtual Thread(虚拟线程)新项目可考虑

为什么选 17 而不是 21

  1. 生态成熟:SpringBoot 3.x 主流支持版本,所有第三方库都已稳定
  2. 企业主流:80% 新项目仍在用 17
  3. 学习资源丰富:文档、博客、stackoverflow 答案最多
  4. 生产稳定:已发布 4 年,所有已知 bug 都已修复

三、Windows 平台安装(推荐)

步骤 1:下载 JDK

  1. 打开 Eclipse Temurin 官网
  2. 选择:
    • 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。

图形界面配置法

  1. 右键 此电脑属性高级系统设置环境变量
  2. 系统变量(不是用户变量)下点 新建
变量名:JAVA_HOME
变量值:C:\Program Files\Eclipse Adoptium\jdk-17.0.13.11-hotspot
  1. 系统变量 里找到 Path,双击编辑:
┌──────────────────────────────────────────┐
│  Path                                    │
├──────────────────────────────────────────┤
│  %JAVA_HOME%\bin          ← ① 新增      │
│  %JAVA_HOME%\lib          ← ② 新增      │
│  C:\Windows\system32                    │
│  ... 其他已有路径 ...                    │
└──────────────────────────────────────────┘

命令行快速配置法(PowerShell)

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:验证安装

打开 新的 命令行窗口(旧的窗口不会加载新环境变量),执行:

bash
# ① 检查 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

bash
# 没装的话,去 https://brew.sh/ 按官方指引安装
brew --version
# 期望输出:Homebrew 4.x.x

步骤 2:安装 Temurin 17

bash
# 推荐:用 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
# 如果用 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:验证安装

bash
# ① 检查 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

bash
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,但更强大。

bash
# 安装 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)

bash
# 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:验证安装

bash
# ① 检查 javac
javac -version

# ② 检查 java
java -version

# ③ 检查 JAVA_HOME
echo $JAVA_HOME

六、环境变量到底是怎么生效的?

展开:环境变量底层原理(适合好奇的同学)

当你在命令行输入 javac 时,操作系统会按以下顺序查找:

  1. 当前目录:先看 ./javac 是否存在
  2. PATH 变量:按 :(Linux/macOS)或 ;(Windows)分隔的顺序,逐个目录查找 javac.exe(Windows)或 javac(Linux/macOS)
  3. 找到第一个就执行

所以 PATH 里路径的顺序很重要:

  • ❌ 错误顺序:旧 JDK 在前,新 JDK 在后 → 用的是旧版本
  • ✅ 正确顺序:新 JDK 在前,旧 JDK 在后 → 用的是新版本

JAVA_HOME约定,很多工具会主动读取这个变量来找 JDK 位置。如果不配,工具就不知道 JDK 在哪。

七、IDE 选择与配置

强烈推荐使用 IntelliJ IDEA,有 Community(免费)和 Ultimate(付费)两个版本。

版本价格功能推荐场景
Community免费Java / Kotlin / Android / 基础 Web本教程使用
Ultimate5,990 元/年Spring / 数据库 / Web 全套企业项目

下载与安装

  1. 访问 JetBrains 官网
  2. 下载 Community Edition
  3. 安装后第一次启动会让你选择主题、装插件

必备配置

打开 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 路径,顺序不对。

解决

bash
# 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 安全策略。

解决

bash
# 临时绕过(不推荐)
# 系统设置 → 隐私与安全 → 仍要打开

# 或删除隔离属性
sudo xattr -r -d com.apple.quarantine /Library/Java/JavaVirtualMachines/temurin-17.jdk

九、本章小结

步骤关键
选 JDKEclipse Temurin 17(OpenJDK 发行版)
Windows下载 msi 安装器,勾选 Add to PATH
配置 JAVA_HOME系统变量(不是用户变量),值为 JDK 安装目录
PATH 配置%JAVA_HOME%\bin 必须在最前面
macOS推荐 Homebrew 或 SDKMAN!
Linux推荐 SDKMAN! 或 apt/yum
IDEIntelliJ IDEA Community(免费)

动手练习

  1. 三平台验证:如果你能切换三台电脑(或虚拟机),分别完成 Windows、macOS、Linux 的安装
  2. 多版本并存:尝试同时安装 Java 8 和 Java 17,学会切换版本
  3. IDE 配置:下载并配置 IntelliJ IDEA Community,安装上面推荐的 5 个插件
  4. 环境检查脚本:写一个脚本(Windows bat / Linux shell),自动检查 Java 安装并打印版本信息

参考脚本:check-java.sh(Linux/macOS)

bash
#!/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 "=== 检查完成 ==="

推荐阅读


下一章第 3 章:第一个 Hello World

你已经完成了

  • ✅ 理解 JDK / JRE / JVM 关系
  • ✅ 安装 Temurin 17
  • ✅ 配置 JAVA_HOME 和 PATH
  • ✅ 安装并配置 IntelliJ IDEA Community
  • ✅ 写了一个环境检查脚本

本站基于 VitePress 构建 · 由 Codebook 团队维护