为了能够使用某一个包的成员,我们需要在 Java 程序中明确导入该包。使用 “import” 语句可完成此功能。
在 java 源文件中 import 语句应位于 package 语句之后,所有类的定义之前,可以没有,也可以有多条,其语法格式为:
import package1[.package2…].(classname|*);
同个包中的类相互引用,不需要导入,包导入只是对于不同包而言,自己导入自己会报错:
包导入不仅仅是import这么简单,还得注意包中的类的访问权限。
同个包的类之间访问比较简单,在代码中直接使用类名(即使这两个类位于不同的源文件中);而不同包之间的访问则必须满足一个条件:一个类如果希望被其他包中的类访问, 那么必须加上public修饰(注意:用public修饰的类必须和源文件名同名)。
下图中的Person1这个类,由于没有定义为public,所以只能在包内可见,其他包无法通过import导入它。相反,Person类则可以被导入。
com包下定义了一个默认权限的Person1类。
school这个包尝试导入com包下的Person1类,报错:
不同包之间的使用通常有以下3种方法:
- 使用全名访问类;
即我不使用import导入该类也可以,使用全名。类似于C++中不使用using namespace std
,要以std::cout方式才能访问cout。
- import 该类;
package school;
import com.Person;
public class School {
public static void main(String[] arg) {
Person per = new Person();
}
}
- 使用通配符
可以使用通配符“*”代替类名,将包中的所有类导入:
import aaa.bbb.*;
注意:
import aaa.bbb.*;并不会导入aaa.bbb.ccc包下面的类。包aaa.bbb和包aaa.bbb.ccc虽然表面上存在层级关系,但实际是独立的,这点在eclipse的工程界面中可以看出来:
com和com.json没有相互包含关系。
误区:import导入的对象是包中的类,所以不能直接import 包名;