总结如下:
关于这两种导入类型大家各有所爱, 众说纷纭。 这里分析一下这两种导入类型的大致任务原理供大家参考。
单类型导入比拟好了解, 仅仅导入一个public类或者接口。 而对于按需类型导入, 有人曲解为导入一个包下的所有类, 看名字就知道, 他只会按需导入, 也就是说它并非导入整个包, 而仅仅导入以后类需要使用的类。 因为单类型导入和按需类型导入对类文件的定位算法是不一样的。 java编译器会从启动目录(bootstrap), 扩展目录(extension)和用户类途径下去定位需要导入的类, 而这些目录进仅仅是给出了类的顶层目录。 编译器的类文件定位办法大致可以了解为如下公式:
对于单类型导入很复杂, 因为包明和文件名都曾经确定, 所以可以一次性查找定位。
对于按需类型导入则比拟复杂, 编译器会把包名和文件名停止陈列组合, 例如:
当你的类文件中用到了File类, 那么可能出现File类的中央如下
File\\File类属于无名包, 编译器会首先搜索无名包
需要留意的中央就是, File类之后并不会中止下一步的寻觅, 而要把所有的可能性都查找完以确定是否有类导入抵触。 假设此时的顶层途径有三个,
留意:假设在查找完成后, 编译器发现了两个同名的类, 那么就会报错。 要删除你不必的那个类, 然后再编译。
了解以上原理之后, 我们可以得出这样的结论:按需类型导入是相对不会降低Java代码的执行效率的, 但会影响到Java代码的编译速度。
JAVA检查JDK的源代码就知道SUN的软件工程师一般不会使用按需类型导入。 因为使用单类型导入至多有以下两点好处:
1。 进步编译速度。
当然, 使用单类型导入会使用你的import语句看起来很长。