許多 Java 初學者對 classpath 和 path 的概念感到模糊不清。本文整合自《Java編程基礎》、《Java2技術內幕》等經典教材,旨在系統梳理類載入的核心機制,幫助開發者建立清晰的認知框架。
在 Java 中,每個以 .java 為後綴的源文件稱為一個「編譯單元」。每個編譯單元中僅能包含一個 public 類,但可包含多個非公共類。編譯後,每個類都會生成對應的 .class 文件,由 Java 編譯器(javac)與解釋器(java)負責查找、載入並解釋執行。
path 是作業系統層級的環境變數,指向可執行文件(如 javac.exe、java.exe)所在的目錄(通常是 JDK 的 bin 目錄)。作業系統透過此變數定位並啟動這些工具。
classpath 則是 Java 運行環境專用的變數,用於告訴 JVM 和編譯器去哪裡尋找用戶自定義的類文件與包。它可以包含多個目錄路徑,路徑之間以分號(Windows)或冒號分隔。
JVM 載入類時,遵循以下優先順序:
jdk/jre/lib/rt.jar 核心類庫,以及 jdk/jre/classes 等自動掃描目錄(無需配置在 classpath 中)。. 表示,優先於 classpath。com.example.demo)查找對應的子目錄 com/example/demo。最佳實踐:建議將類文件按包結構組織在專案目錄中,而非直接放入 JDK 的標準目錄,以利於版本管理與專案遷移。
編譯與運行時可透過 -classpath 或簡寫 -cp 臨時覆蓋環境變數:
javac -classpath .;mylib.jar MyClass.java
java -cp .;mylib.jar MyClass
注意:使用此選項時,原有的 CLASSPATH 環境變數將被完全忽略,若仍需當前目錄,必須顯式加入 .。
java.lang 包為核心包,無需額外配置即可自動載入。import 語句引入的類,最終仍依賴 classpath 解析包路徑。