前几天看Thinking in Java的时候, 注意到一个关于import包的问题,书上提到了大部分时候,我们会使用Java标准程序库内的种种组件,这个程序库其实是和编译器附在一起的。使用这些组件时,我们并不需要写上一场串的反转域名。如此只要我们这些写:
import java.util.ArraryList;
便可以告诉编译器,使用Java的ArraryList类。如果还想使用util内的其他类,又不想逐一声明, 那"*"即可, 如下所示:
import java.util.*;
那在写代码的时候,到底用那个好呢,这两者又有什么区别,或是利与弊?经资料,sun的官网和实践所得结论如下:
1. 第一种写法叫单类型导入,即 single -type-import;第二种写法按需类型导入,即type-import-on demand,两者在执行时间上没有不同,但 在编译的效率上,前者会快于后者,所以尽量多用单类型导入 (其中现在的Java IDE到支持自动导入,在看看jdk源码,sun的工程师也基本上都
会使用前者)。
2. 处于语言的灵活性和不同编程者的习惯,java还是支持按需类型的导入。因为在某些情况下,可以少些几行代码 (只要不出现命名冲突的情况)。
3. 关于按需导入,它大致工作的原理是,先在无名包下查找目标类,再在当前包(可能是自定义)下查找目标类,然后到jdk下的核心包去查找目
标类(如果出现诸如 java.util.List, java.awt.List 这中在不同命名空间下都有目标类名的情况,它会把两个包下的类都查找一边,即找到一个 util下的List后不会停止,会在其它包里继续查找List,以确定是否有命名冲突的问题)
所以对于目前的机器处理速度来说,其实#3的情况应该不是太大的问题,但我们完全可以在明确目标类型的情况下使用单类型导入,以提高编译的速度和避免命名冲突。