java - 为什么我必须导入 java.awt.* 和 java.awt.event.* (例如)

标签 java swing import awt

在我现在正在进行的锻炼计划中,它需要一些导入,如下所示:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import java.net.URL;

ELI5:我的问题(我刚刚过了新手入门教程,现在进入中级了?)正如标题所示。如果我已经用 java.awt.* 覆盖了 java.awt.event.*,我实际上是否需要导入它?

如果不是,为什么这看起来是惯例?

最佳答案

以星号结尾的导入语句仅导入该包中的所有,而不是任何子包。因此,如果 A 类位于 com.example 中,B 类位于 com.example.subtype 中,则导入语句如

import com.example.*;

将导入 A 类,但不会导入 B 类。为了导入 B 类,您必须添加

import com.example.subtype.*;

这是为了确保,如果您需要“较高”包中的多个类(从层次结构上来说),您不会从其下的每个子包中导入您可能不需要或不想要的所有类,其中一些可能会具有相同的名称会导致类名冲突。

即,如果有一个类 com.example.subtype.Type 和一个类 com.example.order.Type 你不需要像这样的 import 语句import com.example.*; 以导入这两种类型。

这也是为什么通常最好显式导入某些类而不是从包中导入所有类(就像您对星号所做的那样),除非您需要该包中的太多类,否则导入的负载只会造成困惑.

关于java - 为什么我必须导入 java.awt.* 和 java.awt.event.* (例如),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31334367/

相关文章:

java - Java 的 Runtime.exec() 运行命令中环境变量的求值

java - 我应该如何设计我的 DAO 层

php - 将 JSON 导入 Mysql

python - 从同一父目录中的不同文件夹导入模块时出错

java - 为什么 GridBagLayout 会提供奇怪的结果?

eclipse - 以编程方式将库添加到 Eclipse 项目

java - 如何使用 EasyMock 模拟 DynamoDB 的 ItemCollection<QueryResult>?

Java 魔法日期赋值

java - 使用java实现屏幕共享

java - 使用同一类的按钮关闭 JFrame