2.11 Java文件的结构
本章从小到大说明了 Java 句法的元素,先介绍了单个字符和标记,然后介绍了运算符、表达式、语句和方法,最后介绍了类和包。从实际使用的角度出发,最常使用的 Java 程序结构单元是 Java 文件。Java 文件是 Java 编译器能编译的 Java 代码的最小单元。一个 Java 文件中包含以下内容:
一个可选的
package指令;零个或多个
import或import static指令;一个或多个类型定义。
当然,这些元素之间可以穿插注释,但必须是这种顺序。这就是 Java 文件中的全部内容了。所有 Java 语句都必须放在方法中(不含 package 和 import 指令,它们不是真正的语句),而所有方法都要放在类型定义中。
Java 文件还有一些其他重要的限制。首先,一个文件中最多只能有一个声明为 public 的顶层类。public 类的目的是供其他包中的类使用。但是,在一个类中,声明为 public 的嵌套类或内部类数量不限。第 3 章会详细介绍 public 修饰符和嵌套类。
第二个限制涉及到 Java 文件的文件名。如果 Java 文件中有一个 public 类,那么这个文件的名称必须和这个类的名称相同,然后再加上扩展名 .java。因此,如果 Point 定义为 public 类,那么它的源码要放在名为 Point.java 的文件中。不管类是否为 public,一个文件中只定义一个类,并使用类名命名文件,是良好的编程习惯。
编译 Java 文件时,其中定义的各个类会编译到独自的类文件中;类文件中是 Java 字节码,由 Java 虚拟机解释执行。类文件的名称和其中定义的类名相同,扩展名为 .class。因此,如果 Point.java 文件中定义了一个名为 Point 的类,那么,Java 编译器编译后得到的文件名为 Point.class。在大多数系统中,类文件都存储在包名对应的目录里。因此,com.davidflanagan.examples.Point 类在 com/davidflanagan/examples/Point.class 文件中定义。
Java 解释器知道标准系统类的类文件存储的位置,需要时会加载这些类文件。解释器运行程序时,如果需要使用名为 com.davidflanagan.examples.Point 的类,它知道这个类的代码存储在名为 com/davidflanagan/examples/ 的目录中;默认情况下,解释器会在当前目录中寻找这个子文件夹。如果想告诉解释器在当前目录之外的位置寻找,调用解释器时必须使用 -classpath 选项,或者设定 CLASSPATH 环境变量。详情参见第 8 章对 Java 解释器(java)的说明。
