Java JDK安装与环境变量配置:Windows和Mac完整指南

📅 发布时间:2026/10/10 2:23:12
Java JDK安装与环境变量配置:Windows和Mac完整指南
1. 别急着敲代码先把JDK这摊子事捋清楚很多人第一次接触Java卡住的地方根本不是语法而是我装了个啥为什么命令行里敲java没反应这类问题。我带过不少刚入行的朋友十个人里有八个在环境配置这一步翻过车而且翻的车还都不一样——有人装完JDK忘了配JAVA_HOME有人配了但路径里带了空格有人Mac上装了三四个版本自己都搞不清默认用的是哪个。所以这篇东西我不打算跟你讲什么Java是一门面向对象的编程语言这种废话直接从你下载安装包那一刻开始把Windows和Mac两条路都给你走一遍顺带把那些教程里从来不提、但实际一定会遇到的坑给你标出来。这篇文章适合谁看如果你是完全零基础、刚买了电脑准备学Java的新手照着做就行如果你已经装过但环境总是出问题也可以对照着排查。核心就三件事装对JDK版本、配对环境变量、验证能跑通。听起来简单但每一步都有细节我会把为什么这么做也讲清楚这样你以后换电脑或者帮别人配的时候不用再回来翻教程。先说一个最容易被忽略的前提JDK不是JRE别装错了。JRE只是运行环境你写代码要的是JDKJava Development Kit里面包含了编译器和各种开发工具。现在主流的选择是Oracle JDK、OpenJDK的各种发行版比如Eclipse Temurin、Amazon Corretto、Azul Zulu。我个人的建议是学习阶段直接用Eclipse Temurin或者Oracle JDK都行前者完全免费开源后者商用要注意授权。版本上如果你没有特殊要求选JDK 17或者JDK 21这两个LTS长期支持版本别去追最新的非LTS版那些版本生命周期短出了问题社区资料也少。提示网上有些教程会让你装JDK 8说企业里都用8。这话放在五六年前没错但现在新项目基本都上17了。学新不学旧除非你明确知道自己要维护老系统。2. Windows下的安装从下载到命令行跑通2.1 下载与安装路径的选择Windows上装JDK第一步是去官网或者镜像站下载安装包。以Eclipse Temurin为例进到他们的下载页面选Windows x64的.msi安装包。这里有个细节别选.exe的在线安装器那个需要联网下载组件网络一波动就失败直接下完整的.msi离线包最稳。下载完之后双击安装安装向导里会让你选安装路径。默认路径通常是C:\Program Files\Eclipse Adoptium\jdk-17.x.x-hotspot\这种。我的建议是不要改默认路径除非你的C盘实在没空间。为什么因为很多工具和脚本默认会去这个路径找JDK你改了之后有些东西会找不到。如果你非要装到D盘那就装到D:\Java\jdk-17这种没有空格、没有中文的路径下。记住这句话Java环境最怕路径里有空格和中文后面配环境变量的时候你就知道为什么了。安装过程中会有一个选项问你要不要设置JAVA_HOME变量和把Java加到PATH里。有些安装包默认勾选有些没有。不管它勾没勾你都自己手动配一遍因为自动配的经常不完整而且你以后要装多个版本的时候自动配的会打架。2.2 手动配置JAVA_HOME和Path装完之后打开此电脑右键→属性→高级系统设置→环境变量。你会看到两个区域上面的用户变量和下面的系统变量。建议在系统变量里配这样所有用户都能用。第一步新建一个系统变量变量名填JAVA_HOME变量值填你的JDK安装根目录比如C:\Program Files\Eclipse Adoptium\jdk-17.0.9.9-hotspot。注意这个路径是JDK的根目录不是里面的bin目录很多人在这里填错。第二步找到系统变量里的Path双击编辑新建一条填%JAVA_HOME%\bin。这里用%JAVA_HOME%引用比直接写死路径好以后你换JDK版本只需要改JAVA_HOME的值Path不用动。注意Path里如果有多个Java相关的路径Windows会按从上到下的顺序找。如果你之前装过其他版本的Java把新的那条移到最上面否则命令行里用的还是旧版本。配完之后一定要重新打开一个新的命令行窗口因为环境变量是在窗口启动时读取的你原来开着的cmd不会自动刷新。新开一个cmd或者PowerShell敲java -version如果输出类似openjdk version 17.0.9 ...就说明Java运行环境通了。再敲javac -version如果也能输出版本号说明编译器也通了。这两个命令缺一不可只通java不通javac说明你Path里只加了JRE的路径没加JDK的。2.3 写第一个程序验证全链路光看版本号还不够得实际编译运行一个文件才算真正跑通。找个地方新建一个文件夹比如D:\javatest在里面新建一个文本文件改名成Hello.java。注意文件名必须和类名完全一致包括大小写这是Java的硬性规定。内容写public class Hello { public static void main(String[] args) { System.out.println(环境配置成功); } }然后在命令行里cd到这个目录执行javac Hello.java这一步如果没有报错目录里会多出一个Hello.class文件。再执行java Hello屏幕上打印出环境配置成功恭喜你Windows这边的全链路就通了。如果javac报找不到文件检查你是不是在文件所在目录执行的命令如果java Hello报找不到或无法加载主类检查类名和文件名是否一致以及有没有带.class后缀运行的时候不能带后缀。3. Mac上的安装Homebrew和手动安装两条路3.1 用Homebrew装JDK推荐Mac上装JDK最省事的方式是用Homebrew。如果你还没装Homebrew先装它这个工具相当于Mac上的应用商店一条命令搞定安装卸载。装好之后先搜一下有哪些JDK版本brew search jdk你会看到一堆比如openjdk17、openjdk21、temurin17等等。我一般用Temurin的brew install --cask temurin17注意这里用的是--cask因为JDK是图形化安装包不是普通的命令行工具。装完之后Homebrew会把它放到/Library/Java/JavaVirtualMachines/目录下。你可以用这个命令看看装了哪些/usr/libexec/java_home -V这个命令会列出所有已安装的JDK版本和它们的路径。Mac上有个很好用的工具叫java_home它能帮你动态切换版本。比如你想让当前终端用17export JAVA_HOME$(/usr/libexec/java_home -v 17)但这样只对当前终端窗口有效关掉就没了。要永久生效得写进shell的配置文件里。3.2 配置Mac的环境变量Mac从Catalina版本开始默认shell从bash换成了zsh。所以你大概率要改的是~/.zshrc文件如果你还在用bash那就是~/.bash_profile。用任意文本编辑器打开比如nano ~/.zshrc在文件末尾加上export JAVA_HOME$(/usr/libexec/java_home -v 17) export PATH$JAVA_HOME/bin:$PATH第一行是设置JAVA_HOME用java_home工具自动找17版本的路径这样你以后升级小版本不用改这里。第二行是把JDK的bin目录加到PATH最前面保证优先使用这个版本。保存退出后执行source ~/.zshrc让配置立即生效。然后同样用java -version和javac -version验证。Mac上还有一个坑系统自带的Java可能是个占位符你敲java -version它会提示你没有Java运行时是否安装这时候千万别点安装那是苹果的JRE不是你需要的JDK。按上面的步骤配好之后这个提示就不会再出现了。3.3 Mac上多版本共存的切换技巧Mac上多版本共存比Windows方便得多因为java_home工具就是干这个的。假设你装了17和21两个版本想临时切到21跑一个项目export JAVA_HOME$(/usr/libexec/java_home -v 21)当前终端就切过去了。想永久默认用21就把.zshrc里的-v 17改成-v 21。如果你经常需要在版本间切换可以在.zshrc里加个别名alias jdk17export JAVA_HOME$(/usr/libexec/java_home -v 17) alias jdk21export JAVA_HOME$(/usr/libexec/java_home -v 21)这样以后敲jdk17或jdk21就能一键切换非常顺手。这个技巧我在实际工作中用得很多尤其是同时维护老项目和新项目的时候。4. 环境配好了但你可能还会遇到这些幺蛾子4.1 命令行里java能用但javac不能用这是最经典的问题原因几乎只有一个你的Path里加的是JRE的bin目录不是JDK的。Windows上有些安装包会同时装一个JRE到C:\Program Files\Java\jre1.x.x如果你不小心把这个路径加到了Path里就会出现java能用但javac找不到的情况。解决办法是检查Path里所有Java相关的条目把JRE那条删掉只保留%JAVA_HOME%\bin。Mac上类似的问题可能是你JAVA_HOME指向了一个JRE而不是JDK。用/usr/libexec/java_home -V看一下列出来的路径确保指向的是JavaVirtualMachines下面的JDK目录而不是/Library/Internet Plug-Ins/那种地方。4.2 改了环境变量但不生效Windows上改完环境变量必须新开命令行窗口这个前面说过了。但还有一种情况你新开了窗口还是不生效那可能是你改的是用户变量里的Path但系统变量里有一条更靠前的旧Java路径把它覆盖了。这时候你要么把用户变量里的删掉要么把系统变量里的旧路径删掉。我一般建议统一在系统变量里配避免这种打架。Mac上如果你改了.zshrc但新终端还是不生效检查一下你是不是改错了文件。有些人的Mac上同时存在.bash_profile和.zshrc而默认shell是zsh你改.bash_profile当然没用。用echo $SHELL确认当前shell然后改对应的配置文件。4.3 路径里有空格导致的各种诡异报错这个问题在Windows上特别常见。如果你的JDK装在C:\Program Files\下面而某些老工具或者脚本没有正确处理路径里的空格就会报一些莫名其妙的错比如系统找不到指定的路径或者把C:\Program当成一个命令。虽然JAVA_HOME用引号包起来能解决大部分问题但有些工具就是不认。最省心的办法是一开始就装到没有空格的路径比如C:\Java\jdk-17。Mac上一般不会有这个问题因为Mac的路径规范里空格处理得比较好但如果你把JDK放在带空格的目录下也建议挪个位置。4.4 多个版本打架不知道当前用的是哪个Windows上可以用where java命令列出所有在Path里的java.exe路径排在最上面的就是当前生效的。Mac上用which java看当前用的是哪个再用java -version确认版本。如果你发现版本不对就按前面的方法调整Path顺序或者JAVA_HOME。我自己的习惯是在.zshrc里加一行echo 当前JDK: $(java -version 21 | head -1)这样每次开新终端都会打印当前JDK版本一目了然。Windows上可以在PowerShell的profile里加类似的提示不过稍微麻烦一点看个人需求。5. 选JDK版本和发行版别被网上的说法带偏5.1 LTS版本怎么选Java的版本节奏是每半年出一个新版本但只有特定版本是LTS长期支持比如8、11、17、21。非LTS版本只维护半年过了就没人管了。学习阶段直接选最新的LTS也就是21截至我写这篇的时候。但如果你要跟着某些教程或者课程走它们可能用的是17甚至11那就跟教程保持一致避免因为版本差异导致代码跑不起来。JDK 8虽然老但市面上还有大量存量系统在跑所以如果你是为了维护老项目学8也没问题。但新项目一律建议17起步。JDK 21引入了一些新特性比如虚拟线程对高并发场景很有帮助但学习阶段暂时用不到不用纠结。5.2 发行版的选择Oracle、Temurin、Corretto怎么挑Oracle JDK从JDK 17开始用的是NFTC许可证简单说就是个人学习和开发免费商用要付费。如果你只是自己学用Oracle没问题。但如果你在公司用或者想避免任何法律风险就用OpenJDK的发行版。Eclipse Temurin以前叫AdoptOpenJDK是目前最流行的开源选择社区活跃更新及时各大操作系统都支持。Amazon Corretto是亚马逊维护的如果你以后要部署到云服务上用这个兼容性很好。Azul Zulu也不错尤其在一些嵌入式场景下。对于初学者来说这几个用起来没有任何区别你随便选一个就行别在这上面纠结太久。我一般推荐Temurin因为它的下载页面最直观安装包也做得最规范。5.3 需不需要装多个版本如果你刚开始学只装一个版本就够了装多了反而容易搞混。等你学到一定程度比如需要同时维护两个不同Java版本的项目再考虑多版本共存。Mac上多版本切换很方便Windows上稍微麻烦一点但也能做。我的建议是先把一个版本用熟把环境配置的原理搞明白以后加版本就是复制粘贴的事。6. 验证环境是否真的没问题几个实用检查手段6.1 用命令行做全面体检前面说的java -version和javac -version只是最基本的。如果你想更全面地检查可以敲java -XshowSettings:properties -version这个命令会打印出一大堆系统属性包括java.home、java.version、os.name等等。你可以从中确认java.home指向的是不是你预期的JDK目录。这个命令在排查环境问题时特别有用因为有些工具会读取java.home来决定用哪个JDK。另外javac -help能列出编译器的所有选项如果你能看到输出说明编译器完全正常。jar --version检查打包工具jshell --version检查交互式工具JDK 9以上才有。这几个命令都通了你的JDK就是完整可用的。6.2 在IDE里验证不管你用IntelliJ IDEA、Eclipse还是VS Code装好之后都要检查一下IDE用的JDK是不是你配的那个。以IntelliJ IDEA为例新建项目的时候它会让你选JDK如果列表里没有你装的版本就手动添加指向JAVA_HOME那个目录。项目建好之后随便写个main方法跑一下能打印出结果就说明IDE这边也通了。这里有个坑IDE有时候会自带一个JDK比如IntelliJ IDEA就捆绑了一个JetBrains Runtime。如果你在IDE里跑代码没问题但命令行里跑同样的代码报错那多半是IDE用了自带的JDK而命令行用了你配的那个。这时候你要么统一用同一个要么在IDE的设置里把JDK改成你手动装的那个。我一般建议统一避免出现IDE里能跑命令行跑不了这种让人抓狂的情况。6.3 写一个稍微复杂点的程序测试光跑Hello World还不够可以写个稍微复杂点的比如读取命令行参数、做点字符串处理public class EnvCheck { public static void main(String[] args) { System.out.println(Java版本: System.getProperty(java.version)); System.out.println(Java安装路径: System.getProperty(java.home)); System.out.println(操作系统: System.getProperty(os.name)); if (args.length 0) { System.out.println(传入参数: String.join(, , args)); } } }编译运行之后它会打印出当前JDK的版本和路径你可以对照着确认是不是你配的那个。这个程序虽然简单但用到了系统属性读取和命令行参数能验证的东西比Hello World多。7. 一些我踩过的坑和后来总结的经验7.1 别用中文路径别用中文用户名Windows上如果你的用户名是中文比如C:\Users\张三\有些工具在处理路径时会出问题。虽然Java本身对中文路径的支持还行但周边的构建工具、脚本、IDE插件就不一定了。我遇到过好几次因为用户名是中文导致Maven下载依赖失败的情况。解决办法是在C盘根目录建一个英文目录比如C:\dev\把所有开发相关的东西都放这里面绕开用户目录。7.2 环境变量改完记得重启终端这个坑我踩过无数次改完环境变量兴冲冲地去命令行验证发现没生效然后开始怀疑自己是不是配错了折腾半天才发现只是没开新窗口。现在我的习惯是改完环境变量直接关掉所有命令行窗口重新开一个省得自己犯迷糊。7.3 卸载旧版本要卸干净如果你之前装过Java想换新版本先把旧的卸干净。Windows上通过控制面板→程序和功能卸载卸完之后去C:\Program Files\Java\和C:\Program Files\Eclipse Adoptium\这些目录看看有没有残留有就手动删掉。然后检查环境变量里有没有旧的JAVA_HOME和Path条目一并清理。Mac上用Homebrew装的可以用brew uninstall --cask temurin17卸载手动装的直接删/Library/Java/JavaVirtualMachines/下对应的目录。7.4 公司电脑有权限限制怎么办有些公司的电脑不让你改系统环境变量或者不让你装软件。这种情况下你可以用便携版JDK有些发行版提供zip包解压就能用然后只改用户变量不改系统变量。如果连用户变量都不让改那就在命令行里临时设置set JAVA_HOMEC:\path\to\jdk set PATH%JAVA_HOME%\bin;%PATH%这样只对当前窗口有效但至少能让你先把活干了。Mac上类似用export临时设置就行。7.5 验证的时候别只看版本号很多人配完环境敲个java -version看到版本号就以为万事大吉了。但版本号对不代表环境没问题一定要实际编译运行一个文件。我见过有人java -version正常但javac指向的是另一个版本的JDK编译出来的class文件版本和运行时不匹配报UnsupportedClassVersionError。所以编译和运行都要测而且最好用同一个JDK。8. 后续怎么维护这套环境环境配好之后不是一劳永逸的。操作系统更新、JDK小版本升级、IDE升级都可能影响环境。我的做法是每隔几个月检查一下JDK有没有安全更新有的话就升级小版本。升级的时候如果是用安装包装的直接覆盖安装就行JAVA_HOME不用改因为路径里通常只有大版本号小版本号变了路径不变。如果是手动解压的那就换个目录然后改JAVA_HOME。另外建议把JAVA_HOME和Path的配置写在一个文档里或者截图存下来。以后换电脑或者帮别人配的时候直接照着抄省得重新回忆。我自己就有一个这样的环境配置清单每次换新电脑半小时就能把整套开发环境搭好包括JDK、Maven、Git、IDE这些。最后说一个个人体会环境配置这件事第一次做会觉得繁琐但做多了就会发现套路都一样。核心就是搞清楚装在哪、怎么找到它、怎么让它成为默认。把这三个问题想明白不管Windows还是Mac不管JDK还是Python还是Node.js配置思路都是相通的。所以别怕麻烦第一次认真走一遍以后就是肌肉记忆了。