Java中冗余导入语句的影响是什么?

什么是冗余的java import语句?

它们会影响编译的运行时(性能/大小)吗? 还是像intellisense这样的东西?

提出不同的问题:删除它们有多重要?

Import语句仅影响编译期间发生的事情。

编译器接受此代码,并创建一个.class文件,该文件以可执行格式表示您的代码(二进制代码)。

最后,二进制文件完全相同,但它们的制作方法是不同的。

让我们看一个简单的案例:

 import java.util.*; 

VS

 import java.util.ArrayList; import java.util.List; 

用于:

 //... List  someList = new ArrayList  (); //... 

当编译器命中单词List ,在第一种情况下,它需要弄清楚List存在于那组类中。 在第二种情况下,已经明确地给出了它,因此它更容易。

本质上,发生的事情是编译器必须获取import语句中存在的所有类并跟踪它们的名称,以便在使用它时,编译器可以检索您正在调用的相应函数。

有时,在多个包中存在具有相同名称的类。 在这种情况下(Thomas指的是),您不应该使用*来选择目录中的所有类。

最佳做法是明确描述您的类使用情况。

具有多余的import语句不会影响性能。 它可能使源代码比它应该更长,但对编译的代码没有影响。 Java本身导入不必要的类文件 – 请参阅Java语言规范 部分7.5.5 :

每个编译单元自动导入在预定义包java.lang中声明的所有公共类型名称,就像声明一样:
import java.lang.*;
出现在每个编译单元的开头,紧跟任何包声明之后。

第7.5.2节说

类型导入按需声明永远不会导致任何其他声明被遮蔽。

…意味着通配符导入不会胜过单输入。

正如其他人所指出的,任何体面的IDE(NetBeans,Eclipse等)都会为您删除未使用的导入。

像许多关于性能的问题一样,代码的清晰度通常更为重要。 这应该是您的第一个想法,并且只有在您遇到已知(测量)性能问题的极少数情况下,您应该考虑不要编写最简单,最清晰的代码。

像许多性能问题一样,在这种情况下,最简单,最清晰的代码也是最快的。

您应该保持import或让IDE维护它们,以使它们保持清晰并使代码更易于维护。 即使对于编译器或IDE,性能问题也非常小。

命名空间冲突最大的危险。 例如,如果两个导​​入的库都具有List类型,则它可能不会使用您认为的类型。

删除它们很重要,因为它们会给.java文件添加膨胀,因为在给定文件中删除它们既快又便宜,特别是如果你使用IDE( CTRLSHIFTO ,我相信,是Eclipse中的快捷方式)。

至于“多余的import为机器做什么”,嗯,真的不多。 本身只会被添加到相关的jar文件中一次,并且每个类只会加载一次(请参阅“不是每个类”),所以除了添加一些微不足道的时间进行编译之外,它不会对程序本身产生任何实质性的长期影响。

也就是说,解决这个问题既便宜又容易:如果你没有使用IDE,那么你应该有一个明确的分组导入语句,这些语句在一些合理的顺序中开始(我按字母顺序排列,意思是我会立即看到两个java.util.Map导入,因为它们彼此相邻!)。 如果你没有解决问题,那么你的编码员会积极参与,所以我建议这样做符合你的最佳利益。