没有,在所有没有区别。
据The Java Virtual Machine Specifications, Second Edition,Chapter 5: Loading, Linking and Initializing说以下内容:
Java虚拟机动态 负载(§2.17.2),链接(§2.17.3),并 初始化(§2.17.4)类和 接口。加载是 的过程,该过程查找具有 特定名称的 类别或接口类型的二进制表示,并创建类别 或来自该二进制 表示的接口。链接过程 采取类或接口和 将其组合到Java虚拟机的运行时状态 ,以便它可以执行 。
在编译时,没有链接类,因此使用通配符import
ing没有区别。其他类不包括在所产生的class
文件中。
事实上,如果你看一下class
文件的字节码(通过javap
或反汇编等),你不会找到任何import
语句,所以在您的源具有import
陈述或更多数量较少,不会影响class
文件的大小。
这里有一个简单的实验:尝试编写一个程序,并与import
S使用通配符编译,和另一个明确的进口。生成的class
文件应该具有相同的大小。
在特定的类使用显式import
陈述也许少可读(和麻烦,如果不使用像Eclipse的IDE将写吧),但将允许您处理类的重叠两个包中的名字。
例如,在java.util
和java.awt
包中都有List
类。通过导入两个包,将有一个名为List
类冲突:
import java.util.*;
import java.awt.*;
// ... snip ... //
List l; // which "List" are we talking about?
通过只输入你所需要的特定的类,这些冲突可能会有所回避:
import java.util.Hashmap;
import java.awt.List;
// .. snip ... //
List l; // Now we know for sure it's java.awt.List
当然,如果你必须同时使用java.util.List
和java.awt.List
,那么你运气不好;你需要明确地使用他们完全合格的类名。
这让很多从C/C++转移到Java的人翘首以盼。 – 2009-02-25 22:08:37