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

时间:2015-07-10 06:56:37

标签: 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.event。*如果我已经用java.awt覆盖了它。*?

如果没有,为什么这似乎是惯例?

2 个答案:

答案 0 :(得分:2)

以星号结尾的import语句只导入该包中的所有,而不是任何子包。因此,如果您有一个生活在com.example中的A类,并且B类生活在com.example.subtype中,那么像

这样的导入语句
import com.example.*;

将导入A类但不导入B类。要导入B类,您必须添加

import com.example.subtype.*;

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

即,如果有一个类com.example.subtype.Type和一个类com.example.order.Type,您不希望像import com.example.*;这样的导入语句导入两个类型。

这也是为什么通常更好地显式导入某些类而不是包中的所有类(就像使用星号一样),除非你从该包中需要这么多类,否则导入的负载只会混淆

答案 1 :(得分:0)

你不必使用。*

例如,您只想使用JFrame,可以导入

import javax.swing.*;

但为什么要导入包的所有功能(不是子包),如果只需要一个?

更好地使用它(在本例中):

import javax.swing.JFrame;

另见:Import package.* vs import package.SpecificType