导入通配符是否一直导入所有内容?
我正在研究一个小程序,并使用数组,所以我做了:
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.*;
你可以通过他们的短名称来参考Scanner
和List
。
但是如果你想为FutureTask
和LinkedBlockingQueue
做同样的事情,你将不得不这样做:
import java.util.concurrent.*;
通配符导入该包中的所有内容。 但是,使用像Eclipse这样的IDE,它为您提供组织导入的可能性。
通配符导入该包中的所有类和接口。
但是,通配符导入不会导入以相同名称开头的其他包。
例如,导入java.xml。*不会导入java.xml.bind包。