小编典典

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

java

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

import java.util.Arrays;

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

import java.util.Scanner;

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

import java.util.*

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

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


阅读 219

收藏
2020-11-23

共1个答案

小编典典

请清楚导入操作。这并不意味着加载.class文件和字节码。

所有导入操作都允许您使用简短的类名来保存键入内容。

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

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

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

它与类加载 无关

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

懒惰通常是开发人员的优点,但在这种情况下不是。拼出来,让您的IDE分别为您插入它们。

如果您输入

import java.util.*;

你会得到引用Scanner,并List通过他们的短名称。

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

import java.util.concurrent.*;
2020-11-23