在Java中,若想利用包的特性,可使用引入(import)语句告诉编译器要使用的类所在的位置。实际上,包名也是类名的一部分。例如,如果abc.Student包中含有Gui类,则该类可称作abc.Student.Gui。如果使用了import语句,再使用类时,包名可省略,只用Gui来指明该类。
1、使用格式
import pkgl[.pkg2[.pkg3…]].(类名I g-);
假设有一个包a,在a中的一个文件内定义了两个类XX和YY,其格式如下:
package a;
class XX{}
class YY{}
当在另外一个包b中的文件ZZ.java中使用a中的类时,语句形式如下:
package b;
import a.*;
class ZZ extends XX {}
在ZZ.java中,因引入了包a中的所有类,所以使用起来就好像是在同一个包中一样。
在程序中,可以引用包的所有类或若干类。引用所有类时,可使用通配符“*”。引入整个包时,可以方便地访问包中的每一个类,但会占用过多的内存空间,代码下载的时间将会延长,因此在了解包的基本内容后,实际要用到哪个类就引用哪个类,尽量不造成资源的浪费。
实际上,程序中不一定要有引用语句。当引用某个类的类与被引用的类存储在同一物理目录下时,就可以直接使用被引用的类。
2、分类
单类型导入:import java.io.File;
按需求类型导入:import java.io.*; 对于按需类型导入,有人误解为导入一个包下的所有类,其实不然,看名字就知道,他只会按需导入,也就是说它并非导入整个包,而仅仅导入当前类需要使用的类。
注:单类型导入和按需类型导入对类文件的定位算法是不一样的。java编译器会从启动目录(bootstrap),扩展目录(extension)和用户类路径下去定位需要导入的类,而这些目录仅仅是给出了类的顶层目录。编译器的类文件定位方法大致可以理解为如下公式:
顶层路径名 \ 包名 \ 文件名.class = 绝对路径
对于单类型导入很简单,因为包明和文件名都已经确定,所以可以一次性查找定位。
对于按需类型导入则比较复杂,编译器会把包名和文件名进行排列组合,然后对所有的可能性进行类文件查找定位。例如:
package com;
import java.io.*;
import java.util.*;