学习Java,我想到了一个对我来说很混乱很多教程的属性。从示例教程中考虑以下两个导入:
import java.awt.*;
import java.awt.event.*;
第一行显然导入java.awt包,第二行是awt的子包。 但是asterix不应该包括所有子包吗?因此,第一行应该做的诀窍 - 不应该需要第二行?如果没有:那么星号的真正用途/用途是什么?
例如,在MySQL中使用SELECT * FROM foo
选择表中的所有字段,也许我很愚蠢地假设这自然就是这种情况。
答案 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”)是该语言的独立包,用于命名空间和访问控制。
当然,对于人类而言,这代表了包之间的可能关系。