Java 包的使用方法
关于包的机制各大资料书其实解释的很详尽了,这里我讲一下让很多萌新(包括我)头疼的的在命令行窗口正确使用包的方法。
包的层次结构其实就类似于我们的文件目录。比如我在D:\course\JavaSE\package 内新建一个HelloWorld.java文件,在这个文件里写一个打印字符串 “HelloWorld” 的类,并把这个类放在包com.wmxtmm中。
package com.wmxtmm;
public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello World");
}
}
这时候如果我们javac HelloWorld.java 发现是可以编译成功的,但是当我们按以前的习惯去java HelloWorld 时发现它会说找不到类 HelloWorld 。
这是为什么呢?包其实就类似于文件夹,比如我们电脑的C盘中会有AppData,Windows,Program Files 等文件夹。当我们把 HelloWorld.class 放入包 com.wmmtmm 中时就相当于把 HelloWorld.class 放进了D:\course\javase\package\com\wmxtmm内。
但要注意的是我们这时候还没有在package内新建com文件夹并在com文件夹内新建wmxtmm文件夹。直接javac HelloWorld.java 编译虽然会成功,但是编译器并不会自动帮我们生成com、wmxtmm这两个文件夹。这时只能自己新建这两个文件夹,并且要自己剪切HelloWorld.class 到wmxtmm目录下。
如果我们不想这么麻烦呢?那就使用带包编译,这时候系统会自动生成com和wmxtmm,并且HelloWorld.class会自动放进wmxtmm内。
命令是 java -d . HelloWorld.java
其中 -d 是带包编译,. 是表示编译后生成的东西放到当前目录下。
这时候再去打开文件夹package,会发现package目录下会自动生成了com文件夹,com内会生成wmxtmm文件夹,并且HelloWorld.class已经在文件夹wmxtmm内。
从上述操作我们可以发现,我们把类放入包中,生成的这个包其实是在当前目录下生成的,比如我们我们的源文件是在package 目录下,这时我们带包编译生成的包就会在package这个目录下新建文件夹。
-
如何运行HelloWorld.class ?
即使我们把命令行窗口的目录切到D:\course\javase\com\wmxtmm内,然后再java HelloWorld ,你会发现还是说找不到该类。
这是因为当我们把HelloWorld.class 放入包com.wmxtmm中后,这时候HelloWorld就不是该类的类名了,这时候该类的类名就变成了 com.wmxtmm.HelloWorld 了,包名+类名这种形式叫这个类的完全限定名。所以这时候我们要退回 D:\course\javase\package 下,用如下命令来运行。