Java平台的许多实现都依赖于分层文件系统来管理源文件和类文件,尽管Java语言规范并不要求这样做。该策略如下。
将类,接口,枚举或注解类型的源代码放在文本文件中,该文件的名称为该类型的简单名称,扩展名为.java
。例如:
//in the Rectangle.java file
package graphics;
public class Rectangle {
...
}
然后,将源文件放在一个目录中,该目录的名称反映该类型所属的软件包的名称:
.....\graphics\Rectangle.java
假定Microsoft Windows文件名分隔符为反斜杠(对于UNIX,请使用正斜杠),则包成员的限定名称和文件的路径名是平行的。
- 类名 –
graphics.Rectangle
- 文件的路径名 –
graphics\Rectangle.java
您应该记得,按照惯例,公司将其反向Internet域名用作其程序包名称。Internet域名为example.com
的Example公司将在其所有程序包名称之前添加com.example
。软件包名称的每个组成部分都对应一个子目录。因此,如果Example公司的com.example.graphics
软件包中包含Rectangle.java
源文件,则它将包含在一系列子目录中,如下所示:
....\com\example\graphics\Rectangle.java
编译源文件时,编译器会为其中定义的每种类型创建一个不同的输出文件。输出文件的基本名称是类型的名称,其扩展名是.class
。例如,如果源文件是这样的
//in the Rectangle.java file
package com.example.graphics;
public class Rectangle {
. . .
}
class Helper{
. . .
}
那么编译后的文件将位于:
<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系统变量
要显示当前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