应选Java 17或21(LTS)版本,优先下载Eclipse Temurin或BellSoft Liberica的OpenJDK安装包;Windows选.msi、macOS选.pkg、Linux注意确认JAVA_HOME路径;配置时JAVA_HOME须指向JDK根目录,PATH添加$JAVA_HOME/bin;验证需java -version与javac -version双命令一致;IDE需单独配置SDK。

下载JDK时该选哪个版本和安装包
Java 17(LTS)或 Java 21(LTS)是当前生产推荐版本,避免使用已停止更新的 Java 8 或非 LTS 版本。Oracle JDK 需要账户且商用受限,OpenJDK 是更稳妥的选择——推荐从 Eclipse Temurin 或 BellSoft Liberica 下载。
Windows 用户注意区分:jdk-21_windows-x64_bin.msi(带图形向导,自动注册表)比 jdk-21_windows-x64_bin.zip(需手动解压+配置)更少出错;macOS 用户优先选 .pkg 安装包;Linux 用户若用 apt 或 dnf 安装,可能装到系统默认的 OpenJDK(如 openjdk-17-jdk),但路径和 JAVA_HOME 指向需额外确认。
配置 JAVA_HOME 和 PATH 的关键步骤
JAVA_HOME 必须指向 JDK 根目录(不是 bin 子目录),例如 Windows 上是 C:\Program Files\Eclipse Adoptium\jdk-21.0.1+12-hotspot,macOS 上常见为 /Library/Java/JavaVirtualMachines/temurin-21.jdk/Contents/Home。PATH 中只需追加 %JAVA_HOME%\bin(Windows)或 $JAVA_HOME/bin(macOS/Linux)。
常见错误包括:
立即学习“Java免费学习笔记(深入)”;
- 把
JAVA_HOME设成.../bin,导致javac找不到tools.jar(现代 JDK 已移除该 jar,但构建工具仍会校验路径) - PATH 中重复添加
java或javac的绝对路径,掩盖了JAVA_HOME生效逻辑 - 在 macOS/Linux 的
~/.zshrc中写export JAVA_HOME=/usr/libexec/java_home -v 21—— 缺少命令替换语法,正确写法是export JAVA_HOME=$(/usr/libexec/java_home -v 21)
验证是否配置成功不能只靠 java -version
java -version 只检查 JRE 运行时,无法确认 JDK(含编译器)是否就位。必须同时运行:
PHP网络编程技术详解由浅入深,全面、系统地介绍了PHP开发技术,并提供了大量实例,供读者实战演练。另外,笔者专门为本书录制了相应的配套教学视频,以帮助读者更好地学习本书内容。这些视频和书中的实例源代码一起收录于配书光盘中。本书共分4篇。第1篇是PHP准备篇,介绍了PHP的优势、开发环境及安装;第2篇是PHP基础篇,介绍了PHP中的常量与变量、运算符与表达式、流程控制以及函数;第3篇是进阶篇,介绍
java -version javac -version
两者输出版本号一致,才说明 JAVA_HOME 和 PATH 均生效。若 javac 报 “command not found”,大概率是 PATH 里漏了 $JAVA_HOME/bin;若 java 和 javac 版本不一致(如 java 是 17、javac 是 21),说明系统存在多个 JDK,且 PATH 中有其他 JDK 的 bin 目录排在前面。
IDE(如 IntelliJ IDEA)通常不依赖系统环境变量,而是自行管理 SDK,所以终端验证通过 ≠ IDE 内能编译。务必在 IDE 的 Project Structure → SDKs 中手动指定同一 JDK 路径。
多 JDK 共存时如何安全切换
开发中常需来回切换 JDK 版本,硬改环境变量太脆弱。推荐方式:
- Windows:用
setx JAVA_HOME "path"临时覆盖(仅当前 CMD 窗口),或配合批处理脚本封装常用组合 - macOS/Linux:在
~/.zshrc中定义函数,例如:jdk() { export JAVA_HOME=$(/usr/libexec/java_home -v "$1") export PATH=$JAVA_HOME/bin:$PATH } # 使用:jdk 21 - 项目级隔离:Maven 项目可通过
maven-compiler-plugin的source/target控制字节码级别,但实际编译仍依赖JAVAC所在 JDK 版本 —— 所以插件设置 ≠ JDK 切换
真正影响编译结果的是 javac 命令的实际路径,不是 source 参数。这点容易被忽略,尤其在 CI 环境中混用不同 JDK 容易导致 UnsupportedClassVersionError。









