4.7.1 类的导入
一个类可以使用所属包中的所有类,以及其他包中的公有类(public class)。我们可以采用两种方式访问另一个包中的公有类。第一种方式是在每个类名之前添加完整的包名。例如:
这显然很令人生厌。更简单且更常用的方式是使用import语句。import语句是一种引用包含在包中的类的简明描述。一旦使用了import语句,在使用类时,就不必写出包的全名了。
可以使用import语句导入一个特定的类或者整个包。import语句应该位于源文件的顶部(但位于package语句的后面)。例如,可以使用下面这条语句导入java.util包中所有的类。
然后,就可以使用
而无需在前面加上包前缀。还可以导入一个包中的特定类:
java.util.*的语法比较简单,对代码的大小也没有任何负面影响。当然,如果能够明确地指出所导入的类,将会使代码的读者更加准确地知道加载了哪些类。
提示:在Eclipse中,可以使用菜单选项Source甇rganize Imports。Package语句,如 import java.util.*,将会自动地扩展指定的导入列表,如:import java.util.ArrayList; import java.util.Date; 这是一个十分便捷的特性。
但是,需要注意的是,只能使用星号(*)导入一个包,而不能使用import java.*或import java.*.* 导入以java为前缀的所有包。
在大多数情况下,只导入所需的包,并不必过多地理睬它们。但在发生命名冲突的时候,就不能不注意包的名字了。例如,java.util和java.sql包都有日期(Date)类。如果在程序中导入了这两个包:
在程序使用Date类的时候,就会出现一个编译错误:
此时编译器无法确定程序使用的是哪一个Date类。可以采用增加一个特定的import语句来解决这个问题:
如果这两个Date类都需要使用,又该怎么办呢?答案是,在每个类名的前面加上完整的包名。
在包中定位类是编译器(comp iler)的工作。类文件中的字节码肯定使用完整的包名来引用其他类。
C++(www.cppentry.com)注释:C++(www.cppentry.com)程序员经常将import与#include弄混。实际上,这两者之间并没有共同之处。在C++(www.cppentry.com)中,必须使用#include将外部特性的声明加载进来,这是因为C++(www.cppentry.com)编译器无法查看任何文件的内部,除了正在编译的文件以及在头文件中明确包含的文件。Java编译器可以查看其他文件的内部,只要告诉它到哪里去查看就可以了。
在Java中,通过显式地给出包名,如java.util.Date,就可以不使用import;而在C++(www.cppentry.com)中,无法避免使用#include。
Import语句的惟一的好处是简捷。可以使用简短的名字而不是完整的包名来引用一个类。例如,在import java.util.*(或import java.util.Date)语句之后,可以仅仅用Date引用java.util.Date类。
在C++(www.cppentry.com)中,与包机制类似的是命名空间(namespace)。在Java中,package与import语句类似于C++(www.cppentry.com)中的namespace和using指令(directive)。
【责任编辑:
夏书 TEL:(010)68476606】