7

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

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

第一行显然是导入 java.awt 包,第二行是 awt 的子包。但是 asterix 不应该包含所有子包吗?因此,第一行应该可以解决问题-不需要第二行吗?如果没有:那么asterix 的真正目的/用途是什么?

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

4

3 回答 3

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,对吗?

于 2012-08-26T15:11:15.673 回答
0

在这里查看我的答案(和我的评论)。通配符只能深入 1 级,而不是子包

于 2012-08-26T15:11:29.543 回答
0

每个包名(“abc”)都是一个独立的包。具有相似命名前缀的两个包(例如“abc”和“abd”)是该语言的独立包,既用于命名空间也用于访问控制。

当然,对于人类来说,这代表了包之间可能存在的关系。

于 2012-08-26T15:15:08.583 回答