在java中导入特定的包或带有通配符的整棵树更好吗?

在java中导入特定的包或带有通配符的整棵树更好吗?,java,import,performance,package,Java,Import,Performance,Package,可能重复: 现在我使用了很多java.util包: import java.util.Calendar; import java.util.logging.ConsoleHandler; import java.util.logging.Level; import java.util.logging.LogRecord; import java.util.logging.Logger; 只做以下事情是否更有效: import java.util.*; 这方面的性能/效率成本是多少?这有关系

可能重复:

现在我使用了很多java.util包:

import java.util.Calendar;
import java.util.logging.ConsoleHandler;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
只做以下事情是否更有效:

import java.util.*;
这方面的性能/效率成本是多少?这有关系吗?请原谅我对这个问题的无知


此外,这只是一个偶然的机会,但是有没有一种方法可以为整个项目导入包呢?这样我就不需要在每个类的基础上重新导入它们了?这是我的第一个大型Java项目,因此我仍在学习更多企业方面的知识。

导入细节是一个很好的做法。Eclipse不需要您做任何工作就可以完成这项工作—只需使用“组织导入”(按ctrl+shift+o windows或cmd+shift+o mac)


原因是,对于要加载的类从来没有任何混淆。

导入通配符包可能会略微降低编译速度,但不会影响运行代码的后续性能


不过,最好只导入您想要的类。

我总是喜欢单独导入所有内容。在我的项目中,这也是一种代码约定,导入语句中禁止使用通配符


请参阅此问题的答案,以了解原因。

此问题的性能/效率成本是多少?

没有。将import+短类名转换为完全限定名将在编译时解析

这有关系吗?

有点。当您导入整个包时,您将面临将来的编译错误,因为您导入的某些包可能会在将来的版本中增长,从而导致不明确的导入

此外,这只是一个偶然的机会,但有没有办法为整个项目导入软件包?


不。如果你一次又一次地导入除
java.util、java.text
之外的包,我会称之为反模式的臭味。也许代码库中缺少了一些抽象。外观、基类都减少了对外部包的直接耦合和依赖性。

此外,不能包含整个树。你可以把你的导入列表缩减到

import java.util.Calendar;
import java.util.logging.*;
但是

不导入
java.util.logging
包中的任何内容。对于Java编译器,没有子包。也不适用于VM(除了一些使用包结构作为文件目录结构的类加载器)


此外,您似乎在混合包和类/接口(或类型)的概念
java.util
java.util.logging
是包,而
java.util.Calendar
java.util.logging.Level
等是类

类型(类/接口)可以在程序中使用,而包主要只是一个名称空间,用于放置类和接口。(此外,它还会对可见性产生一些影响。)

您可以导入单个类型(通过指定其名称)或直接在包中导入所有类型(通过指定包和
*
)。(您还可以使用通配符导入类型中的所有嵌套类型,或者使用
import static.*
导入类的所有静态方法/字段,以确保完整性)


导入从不递归,通配符导入仅适用于一个级别。(您也不能使用
import java.util.*.
导入日志类。)

+1@Bohemian ctrl+SHIFT+o。我冒昧地编辑了你的答案。@Alain-谢谢你的回复。Mac的捷径也错了!它不是选择编辑的。
import java.util.*;