不应该“import foo。*”还包括子包“foo.bar。*”?

时间:2012-08-26 15:09:05

标签: java oop import package

学习Java,我想到了一个对我来说很混乱很多教程的属性。从示例教程中考虑以下两个导入:

import java.awt.*;
import java.awt.event.*;

第一行显然导入java.awt包,第二行是awt的子包。 但是asterix不应该包括所有子包吗?因此,第一行应该做的诀窍 - 不应该需要第二行?如果没有:那么星号的真正用途/用途是什么?

例如,在MySQL中使用SELECT * FROM foo选择表中的所有字段,也许我很愚蠢地假设这自然就是这种情况。

3 个答案:

答案 0 :(得分:13)

不,包裹是整体的。尽管通过层次结构来考虑它们通常很有用,但在Java语言或编译中没有概念表明java.awt.event 属于 java.awt

您与SQL表的比较并不完全正确,因为SQL数据库中没有子表。相反,假设您有一个代表所有类的表,其中包含以下条目:

ID | Package   | Name
--------------------------
1  | awt       | SomeClassName1
2  | awt.event | SomeClassName2

现在,如果你想获得awt课程,你会说:

SELECT * FROM MyTable WHERE Package = 'awt'

您不希望这会给您这两个条目,因为包名称​​以 awt开头,是吗?

答案 1 :(得分:0)

查看我的回答here(以及我的评论)。通配符只有1级深度,而不是子包

答案 2 :(得分:0)

每个包名称(“a.b.c”)都是一个独立的包。具有相似命名前缀的两个包(例如“a.b.c”和“a.b.d”)是该语言的独立包,用于命名空间和访问控制。

当然,对于人类而言,这代表了包之间的可能关系。