Java基础知识总结二(2)
2、程序中包的使用
Java中包的作用是帮助我们管理和组织类,避免类名的冲突。关于包的使用主要内容是package语句和import语句。
(1)package语句
首先注意package语句必需写在.java文件的第一句,并且写在所有类的外面。
例如,将之前得HelloWorld类放入到 p.test.practise包里面;
代码如下:
package p.test.practise;
public class HelloWorld {
public static void main(String args[]) {
System.out.println("Hello World");
}
}
然后,使用下面的编译命令进行编译,
javac HelloWorld.java
编译成功,在相应的文件夹目录下生成了HelloWorld.class文件,如下图所示
然后,使用下面的命令运行HelloWorld.class文件
java HelloWorld
运行结果出现错误,如下图所示,
原因在于将HelloWorld类放入了包里面。在将类放入包里面之后,必须使用类的全限定名运行HelloWorld.class文件,
这里,全限定名的写法为包名加类名的写法
所以,执行的命令应为,
java p.test.practise.HelloWorld
运行结果仍然出现错误,如下图所示,
在这里,忘了最重要的一个知识点就是:类的包结构必须和文件夹的结构一样;
所以,应该将HelloWorld.class文件放到 E:\exam文件夹里面的p文件夹里面的test文件夹里面的practise文件夹里面才可以,
将HelloWorld.class文件放入到相应的文件夹E:\exam\p\test\practise后,
重新运行上面的命令,运行成功,结果如下图所示,
还有需要特别注意的一点是:当前路径必须在.class字节码文件包结构的上层目录,例如,在我的实验中,是E:\exam, 否则将会出现错误。
这样做的原因是:在配置classpath环境变量时,classpath环境变量配置为“ . ” ,所以JVM会去当前目录下找.class文件,而JVM只能在.class字节码包结构的上层目录下才能找到。
所以,在运行.class文件时必须以.class字节码文件包结构的上层目录作为上层目录。
另外,也可以使用下面的javac命令的-d选项使得编译器在编译时自动生成和类结构相同的包的目录结构。用法如下:
javac -d 目标目录 .java源文件名
例如,执行下面的命令重新运行HelloWorld.java文件
javac -d . HelloWorld.java
需要注意的是-d和.java源文件名之间的点 “.” , 表示生成的.class文件的包的目录结构放在当前目录下。
运行后可以的到上面运行的同样的结果,如下图所示
(2)import语句
使用import语句好像给本类中使用的外面的类提供了一个声明。import语句用于提高代码的清晰度和可读性,减少代码冗余。使用import语句应注意以下几点,
1>import语句必须放在类的外部,且仅能在package语句的后面。
2>如果需要用到某个包下面的多个类时,可以使用“ * ”通配符导入该包下面的所有类。但是,使用“ * ”通配符只能导入该包下面的类,而不能导入该包下面的子包中的 类,例如,
可以使用import java.util.*; 导入util包中的所有类,但是不能导入util子包中的类;
如果需要导入util子包中的类,应该带上子包名,例如,如果要导入util子包logging中中的所有类,import语句应为
import java.util.logging.*;
3>只能用统配符“ * ”导入一个包,而不能导入多个包。例如,不能用import java.*;或者import java.*.*;导入以java开头的所有包。
4>还需要知道的一点是,java.lang包是编译器编译程序时默认自动导入的,在写import语句时,可以不用再写java.lang包的导入语句。