导入包。* vs导入包.SpecificType

它会假设任何差异的开销写一个导入加载一个包中的所有types( import java.* ); 不只是一个特定的types(即import java.lang.ClassLoader )? 第二个是比另一个更合适的使用方法吗?

进行导入没有性能或开销成本* vs导入特定types。 然而,我认为这是一个最好的做法,不要使用import。*我的主要原因是我只想保持简单,干净和尽可能less的模糊性,我认为使用。* import会丢失。

看看java API,你会看到许多类和接口在不同的包中具有相同的名称。

例如:

 java.lang.reflect.Array java.sql.Array 

因此,如果您导入java.lang.reflect.*java.sql.*您将在Arraytypes上产生冲突,并且必须在您的代码中完全限定它们。

导入特定的类代替将为您节省这个麻烦。

这实际上是一个非常糟糕的问题。

假设你写了

 import a.*; import b.*; ... Foo f; 

而包F中存在类Foo。

现在你检查你完全编译的代码,六个月后,有人添加Foo类到b包。 (也许这是在最新版本中添加类的第三方库)。

噗! 现在你的代码拒绝编译。

切勿使用按需导入。 这是邪恶的!

有关更多详细信息,请参阅http://javadude.com/articles/importondemandisevil.html

REperformance:

 import a.*; 

VS

 import aX; 

在运行时没有任何区别。 编译器将已parsing的类名硬连接到生成的.class文件中。

less数观点:在我的代码中,我倾向于使用几个包中的大量类,连同几个奇怪的类在这里和那里。 我喜欢把我的import清单保持得很小,这样我就可以一目了然地知道发生了什么事情。 要做到这一点,我设置了4个门槛。 在这之上,Eclipse将使用*作为我的代码。 我发现这使得我的包input可读,而且我倾向于把它们称为在看课程时第一件事 ,来回答这个问题:与谁交谈?

关于名称冲突:从两个包含相互竞争的类名的包中导入四个或更多类的机会有多大? 如果超过10%的时间,你可能需要考虑你的类依赖的包的数量(例如,把它重构成更小的类)。

不要使用import xxx。*的一个很好的理由是对依赖关系有清晰的认识。

您可以更快地知道,您正在使用另一个包的特定类,因为它在源文件的开头就已经列出。

在寻找更多的信息之后,我偶然发现了这个网站,并且很好的解释了这个网站。 导入问题和在导入语句中使用*是否会影响性能? 。

这两种风格之间有没有效率问题? 可能,但是由于导入声明并不实际导入任何东西到你的程序中,所以任何区别都是非常小的。 请记住,在编译单元的顶部有一个隐含的import java.lang。*,JDK 1.2.2中的java.lang包含75个类和接口。 使用一个人为的例子的实验,其中有一个必须被查找的数以千计的类名使用,显示编译速度的微不足道的变化。 因此,在select一种格式时,编译性能可能不应被视为一个因素。

import申报有一个最后的利益angular度。 假设你使用一个内部类:

 package P; public class A { public static class B {} } 

如果要从另一个编译单元访问A,请说:

 import P.*; 

或者:importPA; 但是,如果您想要无限制地访问B,则需要说:

 import PA*; 

或者:importPAB; 第一个在包装P中find类别A中的可用types。第二个types只提供包装P中的类别A中find的typesB.

我倾向于使用IDE的默认设置。 我发现它没有什么值得担心的,因为它没有性能影响,检查依赖性可以用各种工具来处理。

在字节码级别input并不重要,所以不应该有运行时差异。

我觉得最好的做法是:a)通过列出所有导入来明确b)让你的IDEpipe理它。 任何主要的IDE都可以自动更新,sorting和完成导入。

我发现a)在进行in-IDE重构的情况下进行手动重新打包时,会派上用场。 例如,当市场营销人员更改产品名称并决定所有包装应更改名称。

如果您从同一个软件包中导入20多个class级,则最好使用import xxx。*。 “清洁代码”赞成导入整个包装。

这是一个很好的编程习惯,因为任何人都可以通过查看文件顶部的导入块来立即知道某个类是否使用了哪些类,而需要查找是否使用了通配符。