
装 JDK8 这件事说简单是真简单双击安装包一路下一步十分钟搞定说麻烦也是真麻烦我见过太多人卡在环境变量那一步命令行敲java -version弹出一句不是内部或外部命令然后整个人就懵了。Win10 这一代系统在环境变量界面上做了不少改动Path 变成了列表式编辑看似更友好实际上把很多人熟悉的那套复制一长串分号路径的操作习惯给打断了。所以这篇东西我打算把 Win10 下 JDK8 安装与环境变量的配置整个流程拆到不能再细包括每一个勾选项、每一段变量值、每一种报错怎么定位。先明确一下这篇文章解决什么问题你要在一台 Windows 10 机器上装上 JDK8也就是 JDK 1.8业内说 jdk8 和 jdk1.8 是同一个东西并且让命令行和 IDE 都能正常用起来。适合谁看刚入门 Java 的同学、需要跑老项目的开发者、要在本机搭一套测试环境的运维、以及那些装过一次但没搞明白为什么这么配的人。哪怕你之前只会点下一步照着走也能配通如果你已经会装中间那些为什么这么填的段落应该能帮你把以前抄来的东西真正理解掉。1. 装 JDK8 之前需要想清楚的三件事动手之前先花五分钟想明白这三件事能省掉后面至少一个小时的返工。我在带新人的时候发现绝大多数环境问题的根子不在配置那一步而是在安装之前就没规划好装哪儿、从哪儿下、本机上有没有残留的旧版本。1.1 JDK8 为什么到现在还被人反复安装按理说 Java 都更新到二十几个版本了为什么还在装 8原因很现实。一是大量存量项目——尤其是一些企业内部的中间件、老框架、老构建脚本——对 JDK8 之后的语言级变化不兼容比如模块化系统带来的反射限制、移除的sun.misc.*内部 API、JAXB 从标准库剥离等等升版本就是一场重构。二是 JDK8 是最后一个 LTS 且事实标准最稳的版本很多工具链的默认兼容基线就是它。三是 JDK8 引入了 Lambda 表达式、Stream API、新的日期时间 APIjava.time、Optional、接口默认方法这些东西直到今天仍然是写业务代码的主力语法面试也爱问。正因为 JDK8 的生命周期被拉得特别长新机器上装 8 几乎成了一个保留动作。你要清楚一点JDK8 有两个发布系列Oracle JDK 8和OpenJDK 8。Oracle 从 8u211 之后就改成商业许可了如果你只是本地学习、跑跑 demo 没问题但公司正式环境用哪个最好问一下团队规范。OpenJDK 8 的常见发行版有 Eclipse Temurin原 AdoptOpenJDK、Amazon Corretto、Azul Zulu 等都是免费可商用的功能上跟 Oracle JDK 8 基本一致只在少数加密套件和字体库上有差异。实操心得如果你所在的项目没有强制要求必须是 Oracle JDK选 OpenJDK 8 的发行版会更省心安装包更干净没有捆绑的额外组件也不需要去注册账号才能下归档版本。1.2 下载渠道的取舍官网归档、发行版站点、镜像站下载这一环最容易出问题的地方是下到了带一堆捆绑软件的安装包。搜索jdk8 下载出来的结果里前几页经常混着某些软件站重新打包的版本装完附带浏览器主页修改、全家桶弹窗非常恶心。三个稳妥的渠道按推荐度排OpenJDK 发行版官方站点Eclipse Temurin 的官网、Amazon Corretto 的下载页直接提供.msi或.zip.msi好处是能自动写一部分注册表信息.zip好处是纯绿色解压即用。国内高校与云厂商的开源镜像站下载速度比海外站点快得多适合网络环境一般的情况。注意镜像站要选有明确维护方的别去那种个人搭的临时站。Oracle 官方归档页老版本 JDK8 的归档页面还在但下载需要登录账号流程烦一点。注意事项不管从哪儿下下完先核对两件事——文件大小是否和官方标注一致以及安装包的数字签名。Windows 上右键安装包 → 属性 → 数字签名能看到签发者信息是正常的如果这个标签页是空的直接删掉重下别装。1.3 动手前先给系统做三项清理第一项卸载残留的旧 JDK 或 JRE。控制面板 → 程序和功能把所有带 Java 的条目看一遍确认是不是还有 jdk1.7、jre1.8 之类的东西。多个版本共存不是不行但如果你只是想装一个干净的 8先卸掉能少一堆麻烦。卸载后建议手动检查一下C:\Program Files\Java和C:\Program Files (x86)\Java这两个目录有时卸载程序会留下空文件夹或者残留的jre目录。第二项临时关掉安全软件的实时防护。部分杀毒软件对安装程序写入注册表和环境变量的行为比较敏感会拦截或者延迟放行导致安装看起来完成了但实际有文件没落盘。装完以后再打开就行别嫌麻烦。第三项确认磁盘空间和权限。JDK8 完整安装大概占 300 到 500 MB不是什么大问题但你要确保安装目标盘有空间。更重要的是权限——如果你打算装到C:\Program Files下面安装程序会触发 UAC 提权弹窗一定要点是否则会出现部分文件写入失败。提示不要用中文用户名对应的路径去装。如果你的 Windows 账户名是中文某些安装程序解压临时文件时会在用户临时目录出问题遇到莫名其妙的安装中断先换个英文名的管理员账户试试。2. Win10 下 JDK8 安装过程逐步拆解准备工作做完正式进安装。这一段我把每个界面会看到什么、该点哪个按钮都写清楚。安装 JDK8 的过程中真正需要你动脑子的地方只有两处组件勾选和安装路径。2.1 安装向导里那两个勾选项到底要不要勾双击安装包前面两步是欢迎界面和安装路径选择。到了自定义安装界面你会看到两个可以展开的树形节点开发工具Development Tools和源代码Source Code然后下面还有一个独立的公共 JREPublic JRE选项。逐个说开发工具这是 JDK 的核心包含bin目录下的javac.exe、java.exe、jar.exe、jdb.exe等以及lib目录下的类库。必须装不能取消。取消了你这台机器上就只有运行环境没有编译能力。源代码指的是src.zipJDK 标准库的源码压缩包。它不参与编译和运行但如果你用 IDE 看源码、点进ArrayList想看实现就需要它。建议勾上占不了多少空间大约 20 到 30 MB以后debug 的时候能省一次重装。公共 JRE这是给不使用 JDK 的普通用户准备的独立运行环境会往系统里额外注册一份 JRE。现代开发场景下基本用不上因为 JDK 目录里自带的jre子目录已经够 IDE 和工具用了。建议取消勾选少一份东西就少一个排查变量。这里有个细节JDK8 的安装目录结构里jdk1.8.0_xxx下面会有一个jre子目录这个jre里面有它自己的bin里面只有一个java.exe没有javac.exe。这就是后面很多人能运行不能编译的根本原因我们先记住这个结构。2.2 安装路径放 C 盘还是 D 盘的取舍默认路径是C:\Program Files\Java\jdk1.8.0_xxx。我不建议直接用默认路径理由有两个。第一Program Files里有空格。绝大多数现代工具处理带空格的路径没问题但一些老旧脚本、Makefile、批处理、某些开源构建工具在拼接路径时没有加引号遇到空格就会把路径切断报出莫名其妙的找不到文件。这是老生常谈但确实还在发生的事。第二Program Files有权限保护。你想往里面手动放点补丁 jar、临时改个配置文件都要管理员权限很烦。我的做法是建一个专门放开发工具的目录比如C:\Dev\Java\或者D:\Develop\Java\把 JDK 装在里面C:\Dev\Java\jdk1.8.0_202这样路径短、没有空格、没有权限问题环境变量写起来也清爽。如果你的 C 盘是固态而 D 盘是机械盘那还是装 C 盘编译和 IDE 索引速度差别很明显。安装路径在向导里可以直接改。注意一个常见的坑很多人改的是安装路径但接下来还有一步选择 JRE 安装目标文件夹如果前面勾了公共 JRE这里会再要求一个路径。所以我干脆前面就取消公共 JRE少一步。2.3 安装完成后的三种验证方式装完之后先别急着配环境变量这时候命令行还认不到java是正常的。我们可以先直接进安装目录验证文件完整性。方式一看文件结构。打开C:\Dev\Java\jdk1.8.0_202确认这几个东西都存在目录/文件作用是否必需bin所有可执行程序javac、java、jar 都在这必需jre运行时环境子目录必需lib类库和工具依赖必需src.zip标准库源码可选includeJNI 头文件做本地方法调用才用可选方式二在安装目录里开命令行测试。按住 Shift 键在bin目录空白处右键选择在此处打开 PowerShell 窗口或者直接在资源管理器地址栏输入cmd回车。然后输入javac -version如果输出javac 1.8.0_202说明二进制文件是好的问题只可能在环境变量上。这一步很关键它把文件问题和配置问题分开了能帮你少走很多弯路。方式三检查注册表里有没有留下痕迹。运行regedit看HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft下面是否有Java Development Kit项。有的话说明安装程序正常写入了注册信息一些依赖注册表找 JDK 的软件比如旧版 Eclipse、部分 Installer能自动识别。注意如果方式一里发现bin目录是空的或者jre目录缺失不要试图手动补文件直接卸载重装大概率是杀软拦截或者解压中断导致的。3. 环境变量配置三个变量各管什么、怎么填这是全文的核心也是翻车率最高的地方。我先把三个变量的逻辑讲清楚再给具体的操作步骤。理解了逻辑你以后换机器、换版本都不用再查教程。3.1 JAVA_HOME、Path、CLASSPATH 的分工打个比方。JAVA_HOME相当于你给系统留的JDK 家庭住址它本身不会让任何命令生效纯粹是一个被引用的变量。Path相当于系统能敲开哪些门你把它放进 Path系统才允许你在任意目录下直接敲java。CLASSPATH相当于运行时去哪儿找类文件Java 虚拟机启动时按它的指示加载.class。三者的关系是层层引用JAVA_HOME C:\Dev\Java\jdk1.8.0_202 Path ...;%JAVA_HOME%\bin CLASSPATH .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar%JAVA_HOME%这种写法叫变量引用Windows 在执行时会把它展开成实际路径。用变量的好处是以后你要换成jdk1.8.0_301只要改JAVA_HOME一个地方Path 和 CLASSPATH 自动跟着变。如果你在 Path 里直接写死C:\Dev\Java\jdk1.8.0_202\bin那换版本就得改三处很容易漏。为什么强烈建议配JAVA_HOMEMaven、Gradle、Tomcat、Hadoop、Kafka一长串工具在启动脚本里都会去读JAVA_HOME。你不配这个变量这些工具会报 JAVA_HOME is not defined correctly。所以哪怕只是为了自己省事也要配。3.2 Win10 图形界面配置全流程Win10 打开环境变量设置的路径有好几条最快的是这个按Win R输入sysdm.cpl回车打开系统属性窗口 → 切到高级选项卡 → 点右下角环境变量按钮。这条路比在桌面右键此电脑再点一堆要快。打开后你会看到上下两个区域上半部分用户变量只对当前登录账户生效不需要管理员权限。下半部分系统变量对所有账户生效修改需要管理员权限。我个人的选择是JAVA_HOME 建在系统变量里Path 也改系统变量。理由是这样切换账户或者用其他身份运行程序时不会有差异。如果你在公司电脑上没有管理员权限那就只能建在用户变量里也能用只是要注意后面可能出现的路径优先级问题。第一步新建 JAVA_HOME。在系统变量区域点新建变量名填JAVA_HOME变量值填你的实际安装目录注意不要带\bin不要以反斜杠结尾C:\Dev\Java\jdk1.8.0_202这是最常见的错误之一——很多人写成C:\Dev\Java\jdk1.8.0_202\bin然后 Path 里又拼一次%JAVA_HOME%\bin最终变成...\bin\bin当然找不到命令。第二步编辑 Path。选中系统变量里的Path点编辑。Win10 这里会给一个分行的列表界面每行一个路径。点右侧新建粘贴%JAVA_HOME%\bin关于要不要再新加一行%JAVA_HOME%\jre\bin加不加都能跑因为jdk\bin里已经有java.exe了。加上去的好处是万一某个工具硬要去找jre\bin不至于找不到。我一般会加上但顺序放在%JAVA_HOME%\bin的下面。第三步可选新建 CLASSPATH。这个留到下一节细说。第四步一路确定。环境变量窗口点两次确定关掉注意别点取消很多人改完随手点了取消白干。3.3 CLASSPATH 到底还有没有必要配这个问题有争议我给一个明确的实用建议配但要配对。现在的 Java 应用基本都是靠 IDE 或者 Maven/Gradle 管理依赖运行时由-cp参数或者 Class-Path 清单指定类路径系统级 CLASSPATH 用得很少。而且从 JDK6 开始如果你完全不配 CLASSPATH默认值就是.当前目录一般够用。但是很多老教程、老脚本、老项目会默认机器上有一个全局 CLASSPATH尤其是需要直接用java命令跑单个 class、或者用 JDBC 连数据库跑测试的时候。所以配上不亏配法如下新建系统变量CLASSPATH值为.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar三个细节必须注意最前面那个点不能丢。点代表当前目录丢了以后你编译出来的 class 在同目录下都跑不起来会报错误: 找不到或无法加载主类。这是新手最经典的坑我至少帮人排查过二十次。用分号分隔用反斜杠。别写成冒号那是 Linux 的写法。tools.jar只在 JDK 里存在JRE 里没有。如果你把 CLASSPATH 指向了一个 JRE 目录这一项就失效了虽然通常不影响运行但某些依赖编译 API 的工具会报错。3.4 Path 变量被改坏了怎么救回来这个必须单独讲因为它是事故级操作。Path 变量是系统里所有命令行程序的搜索路径里面装着C:\Windows\system32、C:\Windows、C:\Windows\System32\Wbem等等一堆关键目录。如果你在编辑的时候不小心把它们覆盖掉了后果是cmd、ping、ipconfig这些命令全部失效甚至部分软件启动不了。两种编辑模式的差别Win10 的 Path 编辑界面有一个编辑文本按钮点了会把你带到一个长文本框里所有路径用分号连在一起。很多人习惯在这个文本框里全选、粘贴自己的路径结果把原有内容全删了。这就是事故高发点。我的建议优先用列表模式一行一个路径点新建追加不要去动已有的行。如果非要进文本模式先把整个文本框的内容复制出来另存到记事本或者桌面文件里备份改完对照一下有没有丢东西。万一真删了也不用重装系统。默认的最小集合大致是这几条64 位系统C:\Windows\system32 C:\Windows C:\Windows\System32\Wbem C:\Windows\System32\WindowsPowerShell\v1.0\ C:\Windows\System32\OpenSSH\把这些补回去重启终端基本就恢复正常了。但有些第三方软件比如各种数据库、开发工具自己加的路径会丢需要你重新装一遍或者手动补。提示改 Path 之前先执行echo %PATH% path_backup.txt把当前 Path 导出到文件里。这条命令在哪个目录执行都行文件会生成在当前目录下。养成这个习惯你会感谢自己的。4. 配置失败排查实录从报错到定位环境变量配完之后实战就开始了。这一节我把这些年遇到过的典型报错按症状 → 原因 → 处理的方式整理出来你可以当速查表用。4.1 高频报错速查表报错信息最可能的原因处理方向java 不是内部或外部命令Path 没配、配错、或没生效检查 Path 里的%JAVA_HOME%\binjavac 不是内部或外部命令只加了jre\bin没加jdk\binPath 补上%JAVA_HOME%\bin错误: 找不到或无法加载主类CLASSPATH 丢了开头的点CLASSPATH 加回.java -version显示的不是 8机器上有更高版本Path 顺序在前调整顺序或卸载高版本JAVA_HOME is not defined correctly变量名拼错或值带了\bin检查变量名和值编码 GBK 的不可映射字符源码是 UTF-8javac 默认按 GBK 读编译时加-encoding UTF-8改完变量后仍然报错终端窗口是改之前开的没刷新重开终端或set PATH%PATH%这张表覆盖了我遇到过的八成问题。下面挑几个最容易搞混的展开说。4.2java不是内部或外部命令五步定位法这个报错本身没有任何信息量它只说明系统在 Path 列出的所有目录里都没找到java.exe。所以排查思路就是把Path 有没有这一条和这一条指向的目录里到底有没有 java.exe这两件事分开验证。第一步确认变量真的存进去了。新开一个 cmd一定要新开旧窗口读的是旧环境变量执行echo %JAVA_HOME%如果输出的是%JAVA_HOME%本身说明变量没定义成功回去检查是不是建错了区域用户变量和系统变量是两套或者变量名多了空格。第二步确认 Path 里能看到这一条echo %PATH%输出会很长在里面找有没有C:\Dev\Java\jdk1.8.0_202\bin或者展开了的%JAVA_HOME%\bin对应的实际路径。找不到就说明 Path 没加成功。第三步用 where 确认系统到底找到了什么。这是我最常用的命令where javaWindows 的where相当于 Linux 的which它会列出 Path 中所有匹配到的java.exe。如果输出为空说明确实一条都没有如果输出了多个路径第一个就是实际生效的那个。第四步直接验证目录里有没有文件dir C:\Dev\Java\jdk1.8.0_202\bin\java.exe如果提示找不到文件那问题不在环境变量而在于安装本身有问题。第五步确认没有路径拼写问题。看JAVA_HOME的值末尾有没有多余的反斜杠或者空格。C:\Dev\Java\jdk1.8.0_202后面多一个空格展开后就变成C:\Dev\Java\jdk1.8.0_202 \bin找得到才怪。4.3 版本对不上多 JDK 共存导致的串台症状是你明明配置的是 JDK8但java -version出来是 17 或者 21。原因通常是机器上装了多个 JDK而在 Path 中排在前面的那个优先级更高。排查方法还是where java它会一次性把命中的路径全列出来where java假设输出是C:\Program Files\Common Files\Oracle\Java\javapath\java.exe C:\Dev\Java\jdk1.8.0_202\bin\java.exe那第一个生效说明有一份更靠前的路径抢走了。C:\Program Files\Common Files\Oracle\Java\javapath这个目录很典型Oracle 的新版安装程序会自动往 Path 前面插入这条指向一份独立的运行时。处理方式有两种调整顺序把%JAVA_HOME%\bin在 Path 列表里上移到那一条之前。注意 Path 列表的上下顺序就是优先级顺序。临时指定不折腾环境变量直接用绝对路径或者临时覆盖set JAVA_HOMEC:\Dev\Java\jdk1.8.0_202 set PATH%JAVA_HOME%\bin;%PATH% java -version这种写法只在当前 cmd 窗口里生效关掉就恢复非常适合快速测试。另外一个更隐蔽的坑是大小写和系统目录混淆。比如某些软件会在C:\Windows\System32里放一个java.exe而 System32 通常在 Path 很靠前的位置。这种时候where java一眼就能看出来。4.4 改完环境变量却不生效的原因排在最前面的是旧终端没有刷新。你改环境变量的时候已经开着的 cmd、PowerShell、IDEA 甚至资源管理器它们的进程环境块是在启动时拷贝的一份快照改完之后不会自动刷新。解决办法cmd / PowerShell关掉重开。Explorer资源管理器需要重启或者在任务管理器里重启explorer.exe。IDE完全退出再打开。IDEA 认不到新的 JDK 时八成就是这个原因。第二种是改错了区域。在用户变量里配了JAVA_HOME但你的应用是以管理员身份或者别的账户运行的读的是系统变量那一套自然不生效。所以如果你用的是以管理员身份运行的 cmd要往系统变量里配。第三种是Path 总长度超限。Windows 有环境变量长度限制路径太多会被截断。这种情况的诊断方式是看echo %PATH%输出的末尾有没有被切断的痕迹比如最后一个路径明显不完整。处理办法是精简掉不用的路径或者把一些长路径改成用变量拼接。第四种比较少见是组策略或安全软件锁定了环境变量。公司统一管理的机器上可能出现改完之后刷新一下就回去了。这种只能找 IT 处理。5. 装完之后的配套动作与个人经验环境变量配通不代表收工。下面这几步做掉你才算真正拥有一套好用的 JDK8 环境。5.1 命令行跑通第一个 Java 程序这一步的目的是验证编译 → 运行整条链路。找个空目录比如C:\code\demo用记事本或者 VS Code 建一个HelloWorld.javapublic class HelloWorld { public static void main(String[] args) { System.out.println(JDK version: System.getProperty(java.version)); System.out.println(Java home: System.getProperty(java.home)); System.out.println(Classpath: System.getProperty(java.class.path)); } }注意文件名必须和类名完全一致包括大小写HelloWorld.java对应HelloWorld。文件名错了会报类 HelloWorld 是公共的应在名为 HelloWorld.java 的文件中声明。然后在命令行里编译运行cd /d C:\code\demo javac -encoding UTF-8 HelloWorld.java java HelloWorld-encoding UTF-8是必须的因为 Windows 中文系统的默认编码是 GBK而 VS Code 保存文件默认是 UTF-8。不加这个参数源码里如果有中文注释就会出现编码 GBK 的不可映射字符的警告或者报错。运行结果里那几个属性值非常有诊断价值java.version输出1.8.0_202说明生效的是 JDK8。java.home输出C:\Dev\Java\jdk1.8.0_202\jre说明 JVM 是从你装的这套 JDK 里启动的。如果这里指向了别的地方说明有另一套运行时在抢。java.class.path会显示当前生效的类路径可以用来验证 CLASSPATH 有没有被正确读取。5.2 在 IDE 里把项目 SDK 锁到 8以常见的 IDE 为例装完 JDK 之后IDE 并不会自动使用它需要手动指定。基本流程是打开设置 → 找到 SDK / JDK 配置入口 → 添加本地 JDK → 选择C:\Dev\Java\jdk1.8.0_202这个根目录。注意选的是 JDK 根目录不是bin也不是jre。然后还要在项目级别指定两件事Project SDK选刚添加的 8。Language Level / 编译目标版本选 8 对应的那个选项。这两个不一样。SDK 决定用哪个编译器Language Level 决定允许你用哪些语法特性。有些人 SDK 选的是 8但 Language Level 是默认的高版本代码里补全出来的语法在 8 上编译不过就是这么来的。还有一个容易忽略的点IDE 里的 Maven 或 Gradle 也需要单独指定 JDK。IDE 的项目 SDK 和构建工具的 JDK 是两套配置。Maven 的settings.xml里可以配也可以在 IDE 的构建工具设置里指定 runner 的 JRE。如果编译时报无效的目标发行版: 8或者source option 8 is no longer supported这类错误基本就是构建工具用的 JDK 版本不对用的是高版本 JDK 去编译目标 8 的代码。我的习惯是在pom.xml里显式声明properties maven.compiler.source8/maven.compiler.source maven.compiler.target8/maven.compiler.target project.build.sourceEncodingUTF-8/project.build.sourceEncoding /properties这样不管机器上装了哪些 JDK编译目标都是明确的。5.3 多版本切换的个人做法如果你像我一样一台机器上同时要维护 JDK8 和更高版本的项目改来改去太烦。我的做法是写两个批处理文件放在桌面需要哪个环境就双击一下use-jdk8.batecho off set JAVA_HOMEC:\Dev\Java\jdk1.8.0_202 set PATH%JAVA_HOME%\bin;%PATH% echo Switched to: java -version cmd /kuse-jdk17.bat同理换成 17 的路径。核心逻辑是set只在当前 cmd 会话里生效不会污染系统环境变量用完关窗口就恢复。最后的cmd /k是为了让窗口保留下来方便接着敲命令。如果你不想写脚本另一个思路是保持系统变量只配一个版本比如就配 8其他版本在 IDE 里单独指定。这样命令行默认永远是最稳的那个切换成本最低。注意不建议频繁修改系统级JAVA_HOME来做切换。每次改完都要重启所有相关程序而且很容易忘记改回来导致下一个项目莫名报错。5.4 我踩过的几个坑第一个坑路径里的中文和括号。有一次我把 JDK 装在了D:\开发工具\jdk1.8.0_202下面命令行单独用没问题但跑 Maven 时一直报路径相关的错误换成纯英文路径立刻就正常了。所以现在我统一用英文、无空格、无括号的目录。括号同样要避开因为(x86)这种写法在某些批处理里需要转义。第二个坑用户变量和系统变量都配了一份。有次帮人排查发现他用户变量和系统变量里各有一个JAVA_HOME值还不一样。这种情况下用户变量会覆盖系统变量对当前用户而言所以看起来系统变量改了不起作用。排查时一定要两个区域都看一遍set JAVA_HOME命令输出的值才是真正生效的那个。第三个坑Path 里的变量引用被展开了。有人在文本模式下编辑 Path 时把%JAVA_HOME%\bin手动改成了实际路径。这本身没错但以后一改JAVA_HOMEPath 里那条就不跟着变了产生我明明改了变量怎么还是老版本的困惑。所以能保持变量引用就保持。第四个坑装完之后忘了重启终端就下结论。这个坑我踩过不止一次——改完变量立刻在当前窗口敲java -version报错然后开始怀疑人生回去检查半天配置发现全对最后发现只是窗口没重开。把环境变量的当前值导出留档也是我现在换机器必做的一步set env_backup.txt这个文件里包含当前会话的所有环境变量重装系统或者换机器时对照着恢复比凭记忆靠谱得多。特别是那些软件偷偷加进去的路径你自己绝不会记得。