是什么区别:
java.awt.*;
和:
java.awt.event.*;
我发现无论是在许多程序。
是什么区别:
java.awt.*;
和:
java.awt.event.*;
我发现无论是在许多程序。
在Java包没有嵌套。
当你import java.awt.*
,你只导入所有的都在包中的类和接口java.awt
-您未导入所有正在包java.awt
,如java.awt.event
。
虽然它看起来像包嵌套(即,它看起来像仿佛java.awt.event
是一个的“子包” java.awt
),这是不是真的如此。 你应该把java.awt
和java.awt.event
作为发生在他们的名字一个共同部分的两个不同的,不相关的软件包。
第一只从java.awt包导入类型(而不是其子包),以及其他进口只从java.awt.event中(而不是从任何其他包)。
虽然Java包可以(也应该)组织在一个层次,import语句趋于“保守” - 当您从包中导入所有的类型,你只有那些得到明确在这一水平,而不是在较低水平层次结构。
我认为这背后的理由是,要避免虚假进口。 它通常是一个好主意,进口少,你可以 - 只是生活必需品,以避免耦合,相关性和模糊性(例如,如果一个新的类被添加到包,与在名称冲突的名称会发生什么另一包?)。 这就是为什么,如果你使用Eclipse来组织你的进口,这将实际添加特定的import语句的星号版本里面,即使这意味着额外的线路。 在子包导入一切会更糟,你会真正得到一切。
此外,通常的做法是把特殊用途类和具体实施的类,在自己的子包。 通常情况下,你特别要避免导入它们,除非是至关重要的。 此外,进口的整个子树将与冲突。
像许多曾经说过。
进口java.awt中*不会java.awt.event中导入任何类...
而这两个包之间的区别是java.awt中。*包括类,如帧,按钮等和对java.awt.event。*包包括所有的事件/监听器,可以发生。
例如,要创建你需要的类java.awt.Button中,但如果你想要的任何行动时,单击该按钮会发生,你需要一个java.awt.event.ActionListener,将“等待”点击一个按钮,然后产生一个java.awt.event.ActionEvent中。
java.awt.*
是不是正则表达式,这是我想你期待/思维。
java.awt.*
会给你只有在精确包中的类,而不是嵌套包。 试想一下,参与下面的名字空间的冲突!
import com.*
应当指出的是,它被认为是不好的做法,使用*
。 阐明类名进口首选。
进一步阅读: 维基百科:命名空间(计算机科学)