Java导入混乱(Java import confusion)

2019-07-03 18:28发布

是什么区别:

java.awt.*;

和:

java.awt.event.*;

我发现无论是在许多程序。

Answer 1:

在Java包没有嵌套。

当你import java.awt.* ,你只导入所有的都在包中的类和接口java.awt -您导入所有正在包java.awt ,如java.awt.event

虽然它看起来像包嵌套(即,它看起来像仿佛java.awt.event是一个的“子包” java.awt ),这是不是真的如此。 你应该把java.awtjava.awt.event作为发生在他们的名字一个共同部分的两个不同的,不相关的软件包。



Answer 2:

第一只从java.awt包导入类型(而不是其子包),以及其他进口只从java.awt.event中(而不是从任何其他包)。

虽然Java包可以(也应该)组织在一个层次,import语句趋于“保守” - 当您从包中导入所有的类型,你只有那些得到明确在这一水平,而不是在较低水平层次结构。

我认为这背后的理由是,要避免虚假进口。 它通常是一个好主意,进口少,你可以 - 只是生活必需品,以避免耦合,相关性和模糊性(例如,如果一个新的类被添加到包,与在名称冲突的名称会发生​​什么另一包?)。 这就是为什么,如果你使用Eclipse来组织你的进口,这将实际添加特定的import语句的星号版本里面,即使这意味着额外的线路。 在子包导入一切会更糟,你会真正得到一切。

此外,通常的做法是把特殊用途类和具体实施的类,在自己的子包。 通常情况下,你特别要避免导入它们,除非是至关重要的。 此外,进口的整个子树将与冲突。



Answer 3:

像许多曾经说过。

进口java.awt中*不会java.awt.event中导入任何类...

而这两个包之间的区别是java.awt中。*包括类,如帧,按钮等和对java.awt.event。*包包括所有的事件/监听器,可以发生。

例如,要创建你需要的类java.awt.Button中,但如果你想要的任何行动时,单击该按钮会发生,你需要一个java.awt.event.ActionListener,将“等待”点击一个按钮,然后产生一个java.awt.event.ActionEvent中。



Answer 4:

java.awt.*不是正则表达式,这是我想你期待/思维。

java.awt.*会给你只有在精确包中的类,而不是嵌套包。 试想一下,参与下面的名字空间的冲突!

import com.*

应当指出的是,它被认为是不好的做法,使用* 。 阐明类名进口首选。

进一步阅读: 维基百科:命名空间(计算机科学)



文章来源: Java import confusion
标签: java import