啟動程式時加上 java -verbose:class YourClass,控制台會印出所有被加載的 .class 檔案順序。你會發現:只有真正用到該類的實例時,才會觸發加載,單純宣告引用不會加載。這就是「動態加載」的具體體現。
建議初學者先在命令列用 javac -classpath / java -classpath 手動編譯執行,理解搜尋順序:
jre/lib/rt.jar 等核心庫)——最高優先級,C++ 實作,getClassLoader() 回傳 null。jre/lib/ext)。classpath 指定路徑)——預設搜尋當前目錄。搜尋採「向上委派」:找不到才找父層,不會向下找。可用 new A().getClass().getClassLoader() 驗證類由哪層加載。
jre/bin/client/jvm.dll) + 核心類庫 (jre/lib/*.jar) —— 純運行環境。javac, jar 等) + 雙 JVM(client 適合啟動快、server 適合長跑優化)。環境變數陷阱:安裝 JRE 時會自動把 java.exe 複製到 %SystemRoot%\system32,導致 path 中 jdk/bin 排在後面時,實際執行的是 JRE 版 java。可測試:刪除 jdk/bin/java.exe 後程式仍能跑。
打好基礎比追新技術更重要;多動手、多驗證、多在命令列實驗,才能真正內化核心機制。