导入通配符是否一直导入所有内容?

我正在研究一个小程序,并使用数组,所以我做了:

import java.util.Arrays; 

后来我开始扩展我以前做过的事情并决定我想从用户那里得到输入,所以在那时我添加了:

 import java.util.Scanner; 

现在一个想法发生了。 我知道我可以这样做:

 import java.util.* 

然后我只需要1个导入行而不是两个(或者我最终需要的很多),但导入中的通配符是否意味着它将导入该包中的所有内容 ,无论是否需要,或者只是选择性function被拉?

我的直觉是编写更多的代码,只包含我知道我需要的软件包,但是如果没有区别,为什么有人会导入更多级别/软件包呢? (我宁愿懒惰也少写代码)

明确import正在做什么。 它并不意味着加载.class文件和字节代码。

所有导入都允许您通过使用短类名来保存键入。

因此,如果在代码中使用java.sql.PreparedStatement在导入java.sql.PreparedStatement时可以使用PreparedStatement 。 您可以永久编写Java代码,而无需使用单个import语句。 你只需要拼出所有完全解析的类名。

并且类加载器仍将在运行时首次使用来自.class文件的字节代码。

它可以为您节省击键次数。 就这样。

它与类加载无关

就个人而言,我更愿意避免使用*表示法。 我拼写每一次导入。 我认为它更好地记录了我的意图。 我的IDE是IntelliJ,所以我要求它动态插入导入。

懒惰通常是开发人员的一种美德,但在这种情况下并非如此。 拼出它们并让你的IDE单独为它们插入它们。

如果你输入

 import java.util.*; 

你可以通过他们的短名称来参考ScannerList

但是如果你想为FutureTaskLinkedBlockingQueue做同样的事情,你将不得不这样做:

 import java.util.concurrent.*; 

通配符导入该包中的所有内容。 但是,使用像Eclipse这样的IDE,它为您提供组织导入的可能性。

通配符导入该包中的所有类和接口。

但是,通配符导入不会导入以相同名称开头的其他包。

例如,导入java.xml。*不会导入java.xml.bind包。