Java平臺的許多實現依賴於分層文件系統來管理源文件和類文件,儘管Java語言規範不要求這樣作,策略以下。java
將類、接口、枚舉或註解類型的源代碼放在文本文件中,該文件的名稱是類型的簡單名稱,其擴展名爲.java
,例如:程序員
//in the Rectangle.java file package graphics; public class Rectangle { ... }
而後,將源文件放在一個目錄中,該目錄的名稱反映了該類型所屬的包的名稱:shell
.....\graphics\Rectangle.java
假定Microsoft Windows文件名分隔符反斜槓(對於UNIX,使用正斜槓),包成員的限定名稱和文件的路徑名是並行的。segmentfault
你應該記得,按照慣例,公司使用其反向的互聯網域名做爲其包名,Example公司的互聯網域名是example.com
,com.example
在它的全部包名以前,包名稱的每一個組件對應一個子目錄,所以,若是Example公司有一個包含Rectangle.java
源文件的com.example.graphics
包,它將包含在一系列子目錄中,以下所示:code
....\com\example\graphics\Rectangle.java
編譯源文件時,編譯器會爲其中定義的每種類型建立不一樣的輸出文件,輸出文件的基本名稱是類型的名稱,其擴展名爲.class
,例如,若是源文件是這樣的:接口
//in the Rectangle.java file package com.example.graphics; public class Rectangle { . . . } class Helper{ . . . }
而後編譯的文件將位於:get
<path to the parent directory of the output files>\com\example\graphics\Rectangle.class <path to the parent directory of the output files>\com\example\graphics\Helper.class
與.java
源文件同樣,已編譯的.class
文件應位於一系列反映包名稱的目錄中,可是,.class
文件的路徑沒必要與.java
源文件的路徑相同,你能夠單獨排列源目錄和類目錄,以下所示:編譯器
<path_one>\sources\com\example\graphics\Rectangle.java <path_two>\classes\com\example\graphics\Rectangle.class
經過這樣作,你能夠將classes
目錄提供給其餘程序員而不會泄露你的源文件,你還須要以這種方式管理源文件和類文件,以便編譯器和Java虛擬機(JVM)能夠找到程序使用的全部類型。虛擬機
classes
目錄的完整路徑<path_two>\classes
,稱爲類路徑,並使用CLASSPATH
系統變量進行設置,編譯器和JVM都經過將包名稱添加到類路徑來構造.class
文件的路徑,例如,若是域名
<path_two>\classes
是你的類路徑,包名是:
com.example.graphics
那麼編譯器和JVM查找.class
文件位於:
<path_two>\classes\com\example\graphics.
類路徑可能包含多個路徑,用分號(Windows)或冒號(UNIX)分隔,默認狀況下,編譯器和JVM搜索當前目錄和包含Java平臺類的JAR文件,以便這些目錄自動位於類路徑中。
要顯示當前的CLASSPATH
變量,請在Windows和UNIX(Bourne shell)中使用如下命令:
In Windows: C:\> set CLASSPATH In UNIX: % echo $CLASSPATH
要刪除CLASSPATH
變量的當前內容,請使用如下命令:
In Windows: C:\> set CLASSPATH= In UNIX: % unset CLASSPATH; export CLASSPATH
要設置CLASSPATH
變量,請使用如下命令(例如):
In Windows: C:\> set CLASSPATH=C:\users\george\java\classes In UNIX: % CLASSPATH=/home/george/java/classes; export CLASSPATH