2.1.2 Java中的包
请设想这么一个情景,在创造的软件世界中,如果存在着一个地球和一个有人的外星球,他们上面都存在“人”类,但他们绝对不是同一类。如果同样用人类来描述他们,当我们作为造物主要让人类去做什么事情的时候,计算机是没法知道你到底想让哪种人去做事的。此时的解决方案有两种,一是给两种人类取不同的类名,如“地球人类”、“外星人类”,二是加上一个定语地球上的“人类”、外星上的“人类”。第二种方式保留了相同的类名而不至于混淆。Java也提供了这样一种类似于加定语的机制,可把类名空间分成更易管理的块,这种机制就是包,比如上面例子里我们就分了两个包:地球包、外星包,两个包中的类可以同名,但同一个包中的类的名字却必须唯一。另外包也体现封装性,地球包中肯定装的是和地球有关的类,这样更便于管理。
Java包(package)就是具有一定相关性的Java文件的集合。包还有助于避免命名冲突,和文件夹类似,一个文件夹不能放两个相同文件名的文件,而设定多个文件夹就可以解决这个问题,包我们也可以理解为Java中的文件夹。
1.创建包
在Eclipse中,如图2-2所示,在工程中执行“New”→“Package”命令就能创建出一个包。而图2-3即为创建好的一个取名为common的包。
图2-2 新建一个包
图2-3 已经创建好的common包
如果此时我们进入源代码所在的硬盘中,也同样能发现src文件夹下也出现了一个名为common的文件夹。
2.在包中创建类
我们可以新建一些类放到包中,如果是用Ecliplse进行创建包操作,当打开创建好的类的时候会发现在这个类文件的最上面出现了如下面的一段文字:
package [包名1[.包名2[.包名3...]]] ;
关键字package说明该类存在于其后所跟的包中,而这个包允许有多重子包,就如同文件夹下面可以存在子文件夹一般。各级包名之间用“.”号分隔,最前面的包就为最上层包。
编码规范提示:
按照包名的书写规范,通常包名的字母全部小写。
在Java程序中,package语句必须是Java源文件的第一条语句(空格、注释语句除外),以用来指明该文件所定义的类或接口所属的包。
3.使用包
将类组织到包中的主要目的是为了更好地利用包中的类。如果我们想在某个包中的类中再使用其他包中的类该怎么办呢?在Java程序中,若需要使用其他包中的类或接口,一种方法是在程序的开始部分写出相应的引入(import)语句,指出要引入哪些包的哪些类。另一种方法不用引入语句,直接在要引入的类和接口前给出其所在包名。
(1)使用import语句
import语句的格式与意义如下:
import包名1[…].类名或接口名;// 引入指定包中的类或接口 import包名1[.包名2[…]].*; // 引入指定包或子包中的全部类和接口
例如:下面一行语句就是将java.util包里的ArrayList类引用进来。
import java.util.ArrayList;
如果需要引用整个包内所有的类及接口时,就使用*号:
import java.util.*;
当将类引入以后,就可以直接使用该类了。
(2)直接使用包
这种方法一般用在程序中引用类次数较少的时候,在要引入的类和接口前直接给出其所在包名。例如:要引入java.util包里的ArrayList类也可写成如下语句:
java.util.ArrayList list=new java.util.ArrayList();