关键不是卸载旧版,而是通过环境变量设计实现“按需生效”:用java8_home等独立变量分别指向各jdk路径,再以java_home为开关引用它们;path中仅保留%java_home%\bin且置顶,修改java_home值并重启cmd即可切换版本。
要让多个jdk版本在windows上共存并灵活切换,关键不是卸载旧版,而是通过环境变量设计实现“按需生效”。核心思路是:用独立的变量名分别指向各jdk安装路径,再用统一的java_home作为“开关”,由它决定当前生效的是哪个版本。
准备多个JDK安装目录
每个JDK版本必须单独安装,路径不能重叠。例如:
-
JDK 8:安装到
D:\Java\jdk1.8.0_333 -
JDK 17:安装到
D:\Java\jdk-17.0.12 -
JDK 21:安装到
D:\Java\jdk-21.0.4
安装时注意取消勾选“Public JRE”或单独指定JRE路径,避免与JDK内嵌JRE冲突;不建议把JDK和JRE装在同一级文件夹下,防止覆盖。
设置带版本标识的环境变量
在“系统变量”中新建以下变量(变量名自定义,但需有意义):
-
变量名:
JAVA8_HOME,变量值:D:\Java\jdk1.8.0_333 -
变量名:
JAVA17_HOME,变量值:D:\Java\jdk-17.0.12 -
变量名:
JAVA21_HOME,变量值:D:\Java\jdk-21.0.4
这些变量只是“存地址”,本身不参与命令执行,后续靠JAVA_HOME引用它们。
Windows 命令行编码与兼容规范。涵盖 GBK/UTF-8 编码、PowerShell/pwsh 互操作、Python/Node.js、Git 配置及代码生成规则。适用于 Windows 10/11 + MSYS2/Git Bash 环境下的所有命令行操作。
配置主控变量JAVA_HOME和Path
只保留一个JAVA_HOME变量,它的值决定当前使用哪个JDK:
- 新建或编辑系统变量
JAVA_HOME,变量值设为:%JAVA17_HOME%(即引用上面定义的变量) - 编辑系统变量
Path,在最前面新增一项:%JAVA_HOME%\bin - 确保
Path中没有其他硬编码的JDK路径(如C:\Program Files\Java\...),否则会干扰版本识别
这样,只要修改JAVA_HOME的值为%JAVA8_HOME%或%JAVA21_HOME%,再重启命令行,java -version和javac -version就会立即反映新版本。
验证与日常切换
打开新cmd窗口后,依次执行:
-
echo %JAVA_HOME%—— 确认指向是否正确 -
java -version—— 查看运行时JVM版本 -
javac -version—— 查看编译器版本(二者应一致)
如果版本没变,常见原因是:未重启命令行窗口、Path里残留旧JDK路径、或system32目录下存在旧版java.exe(可手动删除C:\Windows\System32\java.exe等文件)。










