類路徑可以串連 Java 運行庫和檔案系統。它定義編譯器和解譯器應該在何處尋找要載入的 .class 檔案。它的基本思想是:檔案系統的階層反映了 Java 包的階層,而類路徑則定義了檔案系統中的哪個目錄可以作為 Java 包階層的根。
遺憾的是,通常檔案系統非常複雜並依賴於平台,而且和 Java 包也不能很好地匹配。尤其是在 Windows 環境中更是如此。Java 是一些 Unix 高手設計的,因而從很多方面來說,這也就意味著它無法很好地與 Windows 約定同步。這樣一來,不論是新使用者還是資深 Java 程式員都深感類路徑的棘手。沒錯,它的確不是 Java 平台好的一面,它讓您到了下班的時候還在忙於調試一個頑固的小問題。
當然採用 Eclipse 這樣的優秀 IDE 可以減少管理類路徑的一些困難,但只能說是一些,而且前提還必須是一切都正常(但這不大可能,因為總會有一些意外出現)。因此,每個 Java 程式員都必須要全面瞭解類路徑,惟有如此,才有希望調試類路徑中所出現的問題。
在本文中,我給出了您所需要瞭解的有關 Windows 中的 Java 類路徑(以及相關源路徑)的全部內容。本文的 姊妹篇 則展示了 UNIX 和 Mac OS X 上的類似技術。遵循這裡列出的步驟可以防止不必要的類路徑故障並能解決出現的大多數問題。
包結構
要掌握類路徑,首先應從其原始碼入手。每個類都屬於一個包,而此包必須 遵守標準的命名規範。簡單地說,包的名稱要由顛倒的兩級網域名稱開始,比如 com.example 或 edu.poly,之後是至少一個或多個單詞用於描述包的內容。比方說,假設有一個網域名稱為 elharo.com,如果要建立一個 Fraction 類,可以將其放入如下包中:
com.elharo.math
com.elharo.numbers
com.elharo.math.algebra.fields
在顛倒的網域名稱之後,需要使用單一單詞的子包名。不要使用縮寫形式,並要保證拼字正確。如果需要,可以使用拼字檢查器。大部分與類路徑相關的問題都是由在原始碼中使用某個單詞而在檔案系統中使用的卻是與之稍有不同的拼字或縮寫而引起的。所以最好的做法就是總是使用拼字正確且沒有縮寫的名稱。
整個包名稱應該是小寫,即使該名稱是在別處常採取大寫形式的一些慣用名稱和縮寫詞。Windows 通常不區分檔案名稱中的大小寫,但 Java 和一些 UNIX 檔案系統卻區分。如果需要在不同的系統間移動檔案,大小寫問題肯定會帶來一些麻煩。
包名稱必須要全部由 ASCII 字元組成。一些編譯器也接受用 Hebrew、Cyrillic、Greek 或其他指令碼編寫的包名稱,但大多數檔案系統並不接受;您稍後就會看到,這樣的包名稱必須擔負充當目錄名這樣的雙重任務。Java 包和類名是 Unicode,但很多檔案系統(包括 FAT)卻不能識別 Unicode。遺憾的是,FAT 系統非常之多。如果只簡單地用不同的預設編碼將檔案複製到系統將會使編譯器和解譯器無法找到正確的類。
不要試圖在包名稱方面節約成本。長遠來看,這隻會有百害而無一利。如果需要網域名稱就買一個。如果名稱太長就買個短些的(我曾經買到了 xom.nu 這樣一個網域名稱,因而我的包首碼就只有 6 個字元)。不要將類放到預設包中(預設包是指如果未在類中包含一條包語句時系統預設給出的包)。如果包訪問不利於對象間的通訊,就需要向類中添加更多的公用方法。需要多次使用的類必須要放到包中。
配置 Windows
副檔名和路徑對於 Java 和 Windows 來說都很重要。所以在開始下面的步驟之前,務必確保能夠看到它們。隱藏部分檔案名稱對終端使用者來說還可以接受(但我並不完全這麼認為),但對於開發人員來說顯然不行。要解決這個問題,需要對 Windows Explorer 的一些預設設定做些更改。
首先在 Windows 案頭開啟任意一個檔案夾。找到 Tools 菜單,選擇 Folder Options。在隨後開啟的對話方塊中,確認選擇了如下三個選項,如圖 1 所示:
“Display the full path in the address bar” 應該選中。
“Display the full path in title bar” 應該選中。
“Hide file extensions for known file types” 應該清除。
圖 1. Windows Explorer 選項
您可能還想選中 “Show hidden files and folders”,它對您的 Java 作業沒有多大影響,但就我個人而言,我很希望能夠看到所操作的所有內容。選中這些選項可以顯露關於所做事情的更多細節,使您能更輕鬆地調試所出現的問題。