5

在我大学的编程课程中,即使我们只使用其中的一个类,我们也只会导入整个包。这可能是因为我们应该使用不提供自动完成功能或任何类似功能的 IDE,所以它只会让一般的编码变得更容易。

但是,既然我是一位经验丰富的程序员,那么将 Java 包作为一个整体导入还是仅从您需要的那些包中导入类更传统呢?

例如,而不是:

import java.util.*;

是不是约定俗成的说法:

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

ETC。?

与选择类相比,导入整个包是否使用更多内存?

4

5 回答 5

5

与其说是内存问题,不如说是如果您使用 * 表示法,您会冒着无意中导入错误类的风险。通常这不是问题,但如果 * 与您打算从另一个包中提取的类匹配,则很难找到它。

如果您从该包中导入三个或更多类,我已经看到 IDE 使用特定类导入替换为单个“*”导入语句的规则。我更喜欢按名称调用每个导入的类。

于 2013-08-31T03:36:28.720 回答
3

您给出的这种通配符类型按需导入声明import java.util.*;不得直接在代码中使用;只使用必需的类名,而不是像import java.util.ArrayList;

有以下和许多其他原因:

  • 重要的原因是可以将一个新的意外类文件添加到同一个包中。这个新类可能与您在另一个包中使用的类型发生冲突,从而在不触及程序本身的情况下将以前正确的程序变成不正确的程序。

  • 显式类导入清楚地向读者传达了正在使用的确切类(以及哪些类没有被使用)。

  • 显式类导入提供更好的编译性能。虽然按需类型导入声明对程序员来说很方便,并且最初节省了一点时间,但每次编译文件时都会增加编译时间。

有关编码约定的更多信息,请参阅: http: //geosoft.no/development/javastyle.html#

于 2013-08-31T05:38:18.653 回答
1

通常,内存消耗是相似的,因为由于继承和功能逻辑,您导入的类可能最终会使用同一包中的其他类。

在我的学校(高中三年级),他们目前让我们进口整个包裹。这主要是因为我们的 IDE (BlueJ) 提供了最低限度的自动完成功能,因此不得不手动导入我们使用的每个类是相当痛苦的。

不过,就我个人而言,我使用 Eclipse 和 IDEA 进行工作,并手动导入每个类。这可以防止不同包中的同名类之间发生冲突,这对我很有帮助,因为 Android 有许多 Java 框架的等价类,但在不同的包中。

于 2013-08-31T03:46:29.977 回答
0

从性能的角度来看,编译时有一点开销,但在运行时没有区别。

于 2013-08-31T03:45:37.417 回答
0

@Chris Gerken 有一个很好的观点。

但这不仅仅是错误。如果您针对更新的库重新编译(在新版本中)添加了一个与您已经使用的同名的新类,通配符导入可能会导致问题。因此,从长远来看,通配符导入往往会使您的代码更加脆弱。

于 2013-08-31T03:50:36.933 回答