4.7.3 将类放入包中
要想将一个类放入包中,就必须将包的名字放在源文件的开头,包中定义类的代码之前。例如,例4-7中的文件Employee.java开头是这样的:
如果没有在源文件中放置package语句,这个源文件中的类就被放置在一个默认包(defaulf package)中。默认包是一个没有名字的包。在此之前,我们定义的所有类都在默认包中。
将包中的文件放到与完整的包名匹配的子目录中。例如,com.horstmann.corejava包中的所有源文件应该被放置在子目录com/horstmann/corejava(Windows中com\horstmann\corejava)中。编译器将类文件也放在相同的目录结构中。
例4-6和例4-7中的程序分放在两个包中:PackageTest类放置在默认包中;Employee类放置在com.horstmann.corejava包中。因此,Employee.class文件必须包含在子目录com/horstmann/ corejava中。换句话说,目录结构如下所示:
要想编译这个程序,只需改变基目录,并运行命令
编译器就会自动地查找文件com/horstmann/corejava/Employee.java并进行编译。
下面看一个更加实际的例子。在这里不使用默认包,而是将类分别放在不同的包中(com. horst-mann.corejava和com.mycompany)。
在这种情况下,仍然要从基目录编译和运行类,即包含com目录:
需要注意,编译器对文件(带有文件分隔符和扩展名.java的文件)进行操作。而Java解释器加载类(带有.分隔符)。
警告:编译器在编译源文件的时候不检查目录结构。例如,假定有一个源文件开头有下列语句:
即使这个源文件没有在子目录com/mycompany下,也可以进行编译。如果它不依赖于其他包,就不会出现编译错误。但是,最终的程序将无法运行,这是因为虚拟机找不到类文件。
例4-6 PackageTest.java
例4-7 Employee.java
【责任编辑:
夏书 TEL:(010)68476606】