导入通配符是否始终导入所有内容?

时间:2012-12-20 21:15:45

标签: java import wildcard packages

我正在研究一个小程序,并且正在使用数组,所以我已经完成了:

import java.util.Arrays;

后来我开始扩展我以前做过的事情,并决定我想从用户那里得到输入,所以当时我补充说:

import java.util.Scanner;

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

import java.util.*

然后我只需要1个导入行而不是两个(或者我最终需要的很多),但导入中的通配符是否意味着它将从该包导入所有,而不管如果需要或不需要,或者只选择功能?

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

3 个答案:

答案 0 :(得分:8)

清楚导入正在做什么。它并不意味着加载.class文件和字节码。

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

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

在运行时首次使用时,类加载器仍将从.class文件中引入字节代码。

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

它没有没有与类加载。

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

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

如果您输入

import java.util.*;

您可以通过短名称来引用ScannerList

但是如果你想对FutureTaskLinkedBlockingQueue做同样的事情,你必须要这样做:

import java.util.concurrent.*;

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

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

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