初學 Java 時最讓人困惑的莫過於:「為什麼安裝完 JDK 還要手動設定三個環境變數?其他軟體安裝完直接就能用啊!」其實這三個變數各司其職,缺一不可。本文從作業系統底層機制出發,透過生活化類比徹底講清楚它們的核心作用。
核心功能:告知作業系統 javac.exe、java.exe 等可執行檔的所在位置。
生活類比:就像你想玩《魔獸爭霸》,得先找到 war3.exe 所在資料夾才能雙擊執行。作業系統執行指令時,會依序搜尋 PATH 內列出的目錄,找到對應的 .exe 才能啟動程式。
不設定後果:在任意目錄下輸入 javac HelloWorld.java 會提示「'javac' 不是內部或外部指令」,必須切換到 JDK bin 目錄下才能編譯,極度不便。
正確設定範例:
%JAVA_HOME%\bin(配合 JAVA_HOME 使用,利於日後升級 JDK 只需改一處)
核心功能:告訴 Java 虛擬機器(JVM)去哪裡尋找 .class 檔案(含自訂類別、第三方 JAR 包)。
生活類比:你的主程式 Main.class 呼叫了 Util.class,JVM 就像快遞員,CLASSPATH 就是「送貨地址清單」。若 Util.class 所在目錄不在清單裡,JVM 就會拋出 ClassNotFoundException 或 NoClassDefFoundError。
關鍵細節:
.(當前目錄),否則同目錄下的類別也會找不到.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar-cp 或 -classpath 參數、Maven/Gradle 管理依賴,避免全域 CLASSPATH 污染核心功能:指向 JDK 安裝根目錄,作為其他變數(PATH、CLASSPATH、Tomcat、Maven、Gradle 等)的參考基準。
優勢:
JAVA_HOME 一處,所有引用它的工具自動生效catalina.sh、mvn.cmd)通用此變數,提升可攜性設定範例:
JAVA_HOME=C:\Program Files\Java\jdk-17

雖然理解三大變數原理很重要,但實際專案建議:
搞懂底層邏輯,才能在環境異常時快速定位問題;善用現代工具,才能讓開發流程更順暢。