Java中有两种包的导入机制

来源:互联网 发布:淘宝店铺退款多了封号 编辑:程序博客网 时间:2024/04/30 13:13

Java中有两种包的导入机制:

    单类型导入(single-type-import),例如import java.io.File

    按需类型导入(type-import-on-demand),例如import java.io.*

 

单类型导入,仅仅是导入导入一个public类或者接口。

按需类型导入,根据名字就可以看出,并不是导入整个包,而是仅仅导入当前类(接口)所需的类或接口。

   

因为单类型导入和按需类型导入对类文件定位的算法是不一样的,java编译器会从启动路径(bootstap),扩展目录(extension),用户类目录下去定位需要导入的类,而这些目录仅仅给出了类的顶层路径。

编译器的类文件定位方法大致可以为:

    绝对路径 = 顶层路径名 - 包名 - 文件名.class

 对于单类型导入,因为包名和文件名都已经确定,可以一次性查找定位到。

 对于按需类型导入则比较复杂,编译器会把包名和文件名进行排列组合,然后对所有的可能性进行类查找定位。

    例如:package com;

         import java.io.*;

         import java.util.*;

当你的类文件中使用到了File类,那么File可能会出现在以下几个地方:

    1 File   File没有package语句,编译器首先搜索无名包。

    2 com.File   File类属于当前包。

    3 java.lang.File   自动导入

    4 java.io.File 

5 java.util.File 

需要注意的是,上面的第4种情况下,编译器找到java.io.File后并不会停止下一步的搜寻,而是把所有的可能性都查找完以确定没有类冲突,如果有类冲突,则会报错,删除不用的类后再编译。假使此时的顶层路径有3个,编译器则会进行3*5=15次查找。

 

在了解包导入原理之后,可以得出如下结论:按需类型导入不会降低java代码的执行效率,但会影响到java代码的编译速度。

 

使用单类型导入至少有两个好处:

    1 提高编译速度

    2 避免命名冲突。

这点从JDK的源码中包导入方式也可以看出。

原创粉丝点击