在我的大学编程课程中,即使我们只使用了一个类,我们也只会导入整个包。这可能是因为我们应该使用不提供自动完成功能的IDE或类似的任何东西,所以它只会使编码更容易。
然而,既然我是一名经验丰富的程序员,那么整个导入Java软件包或者只需要那些软件包中的类就更常规吗?
例如,而不是:
import java.util.*;
常说:
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
等?
与select类相比,导入整个包是否会占用更多内存?
答案 0 :(得分:4)
这不是一个内存问题,而是如果您使用*表示法,则存在无意中导入错误类的风险。一般来说这不是问题,但是如果*匹配你打算从另一个包中提取的类,那么它就是一个难以找到的错误。
我已经看到IDE使用的规则是,如果从该包导入三个或更多类,则特定类导入将被单个'*'import语句替换。我更喜欢按名称调出每个导入的类。
答案 1 :(得分:3)
您提供的类似import java.util.*;
的通配符类型 - 按需导入声明不得直接在代码中使用;仅使用必需的类名称,例如import java.util.ArrayList;
有以下原因和其他许多原因:
重要原因是可以将新的意外类文件添加到同一个包中。这个新类可能与您从另一个包使用的类型冲突,从而将以前正确的程序转换为不正确的程序而不触及程序本身。
明确的类导入清楚地向读者传达了正在使用的确切类(以及哪些类未被使用)。
显式类导入提供更好的编译性能。尽管类型导入按需声明对于程序员来说很方便,并且最初节省了一点时间,但每次编译文件时都需要花费更多的编译时间。
有关编码约定的更多信息,请参阅:http://geosoft.no/development/javastyle.html#
答案 2 :(得分:1)
通常,内存消耗将类似,因为您导入的类可能会因为继承和功能逻辑而最终使用同一个包中的其他类。
在我的学校(高中三年级),他们目前让我们进口整个包裹。这主要是因为我们的IDE(BlueJ)提供了最低限度的自动完成功能,因此必须手动导入我们使用的每一个类都是非常痛苦的。
就个人而言,我使用Eclipse和IDEA进行工作,并手动导入每个类。这可以防止不同包中相同名称类之间的冲突,这对我很有帮助,因为Android具有许多Java框架的等效类,但是在不同的包中。
答案 3 :(得分:0)
从性能的角度来看,编译时会有轻微的开销,但在运行时没有区别。
答案 4 :(得分:0)
@Chris Gerken有一个很好的观点。
但这不仅仅是错误。如果您针对更新的库(在新版本中)添加一个与您已使用的名称相同的新类,则通配符导入可能会导致问题。因此,从长远来看,外卡导入往往会使您的代码更加脆弱。