我正在研究一个小的Java程序,并且正在使用数组,所以我做到了:
import java.util.Arrays;
后来,我开始扩展以前做过的事情,并决定要从用户那里得到输入,因此我添加了:
import java.util.Scanner;
现在发生了一个想法。我知道我可以这样做:
import java.util.*
然后,我只需要1条导入行,而不是2条(或者我最终需要很多条),但是导入中的通配符是否意味着它将从该包中导入 所有内容
,而不管是否需要它,或者仅将选择性功能被拉?
我的直觉是编写更多代码,仅包含我 知道 我需要的软件包,但是如果没有区别,为什么有人会导入他们需要的更多关卡/软件包?(我宁愿懒惰,写更少的代码)
请清楚导入操作。这并不意味着加载.class
文件和字节码。
所有导入操作都允许您使用简短的类名来保存键入内容。
因此,如果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.*;
问题内容: 如果我说: 我得到了ActionListener类。如果我说: 我得到的事件类 包括 ActionListener吗?或者更好: 我认为,如果像上两个示例中那样包含一个类,则可以有效地导入该类并继承其所有子类。但是,例如,当我仅使用最后一行时,Eclipse经常显示错误,表明它无法解析某些项目,并建议我 同时 包含java.awt和java.awt.event。 问题答案: Java中
问题内容: 我想知道是否有任何方法可以导入包的全部内容,从而不必在调用包名称之前对包中的内容添加前缀? 例如,有一种方法可以替代此方法: 有了这个: 问题答案: Go编程语言规范 进口报关单 如果出现一个明显的句点(。)而不是名称,则在该软件包的package块中声明的所有软件包导出标识符都将在导入源文件的file块中声明,并且必须在不使用限定符的情况下进行访问。 例如, 游乐场:https :
问题内容: 使用ES6,我可以从这样的文件导入多个导出: 但是,我喜欢每个文件有一个模块的组织。我最终得到这样的进口: 我希望能够做到这一点: 或类似的名称,并且每个文件都包含一个默认导出,并且每个模块的名称与其文件相同。 这可能吗? 问题答案: 我认为这不可能,但是模块名称的解析取决于模块加载器,因此可能有支持此功能的加载器实现。 在此之前,您可以使用仅包含以下内容的中间“模块文件” 它会让你做
使用ES6,我可以从以下文件导入多个导出: 但是,我喜欢每个文件有一个模块的组织。我最终得到了这样的导入: 我很想能够做到这一点: 或者类似的东西,可以理解为每个文件包含一个默认导出,每个模块的名称与其文件相同。 这可能吗?
这可能是一个简单的问题,但谷歌什么也没有回报。 我已经阅读了java中的帮助包-导入不工作 我仍然不明白为什么直接导入可以工作,但通配符不行。[编辑]我所说的类包是指一个类包。我对Java还是新手,所以我不知道语义学[编辑] 我有一个课程包:,当我尝试导入com时。公司* 我收到以下错误。 如果我导入明确表示我没有问题。 所以我想我有一个解决方案,但为了学习,有人能解释一下我为什么会看到这个问题吗
问题内容: 为什么呢? 有时我需要导入模块的所有属性,因此我使用通配符导入,但是我的一个Vim脚本(使用flake8作为其语法检查器)总是向我发出警告,并告诉我无法检测到未定义的名称。 使用通配符导入还有其他缺点吗? 问题答案: 使用通常不是一个好主意。通配符导入会导致名称空间污染;您导入的名称超出了所需的数量,并且如果您不小心引用了导入的名称,则可能不会得到所需的NameError。 另外,如果