Java包是嵌套的,而不是嵌套的......两者都有?

Vig*_*esh 3 java import

我对使用Java导入包感到困惑.

当我需要时import java.util.Scanner,它也是由import语句完成的:( import java.util.*这对我来说很有意义,因为Scanner类在里面util).

但这个技巧适用于java.awt.event和java.awt.*.这让我更加困惑.(如果您的答案是Java包没有嵌套,请告诉我上述技巧的原因.如果Java有嵌套和独立包,我怎么能找到它们?

Kev*_*man 6

导入通配符不是递归的.

进口java.awt.*也不要导入从什么java.awt.event.它只导入类java.awt,而不是它的"子包".

还应该注意的是,导入包实际上并没有做任何事情,它只是告诉Java在哪里查找你使用的类名.

另外,使用通配符无论如何都有点草率.您应该只导入实际使用的类.

编辑:此问题之前已被问过:递归导入Java和快速谷歌搜索"java递归导入包"会产生一大堆结果,包括:

Java教程:

首先,包似乎是分层的,但它们不是.例如,Java API包括一个java.awt包,一个java.awt.color 包,一个java.awt.font包以及许多其他开头的包 java.awt.但是,java.awt.color包,java.awt.font 包和其他java.awt.xxxx包不包含在 java.awt包中.前缀java.awt(Java Abstract Window Toolkit)用于许多相关的包,以使关系明显,但不显示包含.

导入java.awt.*进口所有在该类型的java.awt包,但它不会导入java.awt.color,java.awt.font或者任何其它 java.awt.xxxx的包.如果你打算使用类和其他类型的java.awt.color,以及那些在java.awt,你必须导入他们的所有文件都包:

进口java.awt.*; 进口java.awt.color.*;

和JLS:

包的分层命名结构旨在方便以传统方式组织相关包,但除了禁止包含具有与顶级类型相同的简单名称的子包之外,它本身没有意义(第7.6节)在该包中声明.

例如,在名为的包oliver和另一个名为的包oliver.twist之间,或者在名为evelyn.wood和的包之间没有特殊的访问关系evelyn.waugh.也就是说,命名包中的代码oliver.twist无法更好地访问包中声明的类型,而oliver不是任何其他包中的代码.

  • 没错 您是否尝试过编写基本的测试示例来测试您的理论? (2认同)