管理 源文件和类文件

Java 平台的许多实现都依赖于分层文件系统来 管理 源文件和类文件,尽管 Java 语言规范并不要求这样做。该策略如下。

将类,interface,枚举或 注解 类型的源代码放在文本文件中,该文件的名称为该类型的简单名称,extensions 为.java。例如:

//in the Rectangle.java file 
package graphics;
public class Rectangle {
   ... 
}

然后,将源文件放在一个目录中,该目录的名称反映该类型所属的软件包的名称:

.....\graphics\Rectangle.java

假定 Microsoft Windows 文件名分隔符为反斜杠(对于 UNIX,请使用正斜杠),则包成员的限定名称和文件的路径名是 Parallel 的。

  • 类名称graphics.Rectangle

  • 文件的路径名graphics\Rectangle.java

您应该记得,按照惯例,公司将其反向 Internet 域名用作其程序包名称。 Internet 域名为example.com的 Example 公司将在其所有程序包名称之前加上com.example。软件包名称的每个组成部分都对应一个子目录。因此,如果 Example 公司的com.example.graphics程序包包含Rectangle.java源文件,则它将包含在一系列子目录中,如下所示:

....\com\example\graphics\Rectangle.java

编译源文件时,编译器会为其中定义的每种类型创建一个不同的输出文件。输出文件的基本名称是类型的名称,其 extensions 是.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,并使用CLASSPATH系统变量进行设置。编译器和 JVM 都通过将包名称添加到 Classpath 来构造.class文件的路径。例如,如果

<path_two>\classes

是您的Classpath,包名称是

com.example.graphics,

然后编译器和 JVM 在.class files中查找

<path_two>\classes\com\example\graphics.

Classpath 可能包含多个路径,以分号(Windows)或冒号(UNIX)分隔。默认情况下,编译器和 JVM 搜索当前目录和包含 Java 平台类的 JAR 文件,以便这些目录自动出现在您的 Classpath 中。

设置 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