|
在缺省情况下,系统会为每一个.java源文件创建一个无名包,该.java文件中定义的所有类都属于这个包,它们之间可以相互引用非private的类成员。但是,由于这个包是没有名字的,所以它不能被其他包所引用。为了解决这个问题,可以创建有名字的包。 创建包的语句需要使用package关键字,而且应该是整个.java源文件的第一句:
package 包名;
有了这句话,当编译完成时,当前.java源文件中的所有类都被放在这个包中。 【例13】下面的Hello.java程序和第一章例1几乎一样,但增加了包定义语句。
package mypack;
class Hello{
public static void main(String[ ] args){
System.out.println("Hello World!"); // 显示字符串
}
}
编译成功后,生成Hello.class文件。如果执行,系统会出现如下画面:
这说明执行失败了。为什么呢? 这是因为,增加了包定义语句后,类Hello的完整名字就是mypack.Hello,试着如此执行:
仍然失败。这是因为Java中的包,和操作系统下的目录结构是相似的。当声明包名为mypack之后,则需要在硬盘上的当前目录下有mypack目录,并且在mypack目录下应该有Hello.class文件。 所以,在当前目录下创建mypack子目录,并且把Hello.class文件放入到mypack子目录之后(这可以在Windows下完成),继续执行:
java mypack.Hello
就会执行成功了,如下图所示。
也可以把点操作符换成斜线“/”,这样执行:
java mypack/Hello
系统也会显示“Hello World!”,这里不再演示。
需要注意的是,当用javac编译java源文件时,系统不会自动创建mypack子目录,也不会把生成的类文件自动放在子目录中。如果希望系统在编译源文件时自动创建子目录(如果子目录事先不存在的话),并将类文件放在相应子目录中,可以在执行javac命令时加上-d参数,格式为:
javac –d 目录 java源文件
其中“目录”用于存放生成的类文件,如果它不存在,系统就会自动创建。
【例14】在例13中,假设已经建立Hello.java,但还没有编译,并且当前目录下也没有mypack子目录,演示javac的“-d”的用法。 下面的命令在当前目录下创建mypack子目录,并且将生成的Hello.class文件放在该子目录下:
javac -d . Hello.java
执行结果如下图所示。可以在Windows中查看已经建立好的mypack子目录和相应的类文件。
注意在命令中有一个点“.”,它和前面的“-d”、后面的“Hello.java”之间都有一个空格,表示在当前目录下创建。因为在Hello.java源文件中有“package mypack;”这句话,所以创建的子目录名是mypack。 下面的命令在当前目录下的mypack子目录下创建mypack子目录,并且将生成的Hello.class文件放在该子目录下:
javac -d .\mypack Hello.java
当然,我们并不希望把Hello.class文件存放在当前目录下的mypack\mypack子目录中。本例仅仅演示点“.”的用法。 下面的命令在d盘创建一个临时文件夹temp(如果它事先不存在的话),并且在temp文件夹下创建mypack子目录,并把生成的Hello.class文件放在该子目录下:
javac -d d:\temp Hello.java
这种用法比较常用,因为可以把编译生成的类文件都放在指定目录下。
上一篇:3.8 包 下一篇:3.8.2 使用包(1)
|