4

我正在开发一个小型 Java 程序并使用数组,所以我完成了:

import java.util.Arrays;

后来我开始扩展我之前所做的并决定我想从用户那里获得输入,所以我添加了:

import java.util.Scanner;

现在产生了一个念头。我知道我可以这样做:

import java.util.*

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

我的直觉是编写更多代码,并且只包含我知道我需要的包,但如果没有什么不同,为什么有人会导入更多的关卡/包然后他们需要呢?(我宁愿偷懒,少写代码)

4

3 回答 3

9

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

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

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

.class并且类加载器仍然会在运行时首次使用文件时从文件中引入字节码。

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

它与类加载无关。

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

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

如果你输入

import java.util.*;

你会得到Scanner他们List的简称。

但是,如果您想这样做,FutureTask并且LinkedBlockingQueue您必须拥有这个:

import java.util.concurrent.*;
于 2012-12-20T21:22:55.887 回答
3

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

于 2012-12-20T21:18:54.543 回答
1

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

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

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

于 2012-12-20T21:24:06.820 回答