【问题标题】:Hierarchy of Java PackagesJava 包的层次结构
【发布时间】:2018-01-22 10:34:17
【问题描述】:

我试图了解 Java 包的一般层次结构。
如果你查阅这个Oracle page,似乎有3个主要包: java、javax 和 org。
Java 平台 7 中的所有包都以这三个之一开头。
这些是更大包装的一部分吗?
我很想看到一棵完整的树,但是 Oracle 提供的树非常令人困惑,因为它太详细了。

我不明白的另一件事是为什么像“java.awt”和“java.awt.color”,或“java.lang”和“java.lang.annotation”这样的包被Oracle放在同一级别.
我确实在网上读到,如果您导入“父包”,则不会从“子包”中导入任何类,这是有道理的。但是,很难认为 java.awt 和 java.awt.color 之间没有关系;似乎很直观,至少包含在 fromer 中。
所以,根据我目前的理解,我会画一棵看起来像这样的树:

【问题讨论】:

  • “但是,很难认为 java.lang 和 java.lang.color 之间没有关系” - 就语言而言确实没有关系。唯一的等级制度是由人类理解强加的。
  • @JonSkeet 我不明白你想给我什么建议:(
  • @GabrieleScarlatti 这种关系在意图之内,而不是在语言之内。 java.awt 的开发人员需要颜色表示,因此他们为 awt 编写了一个包 colors。因此,他们将color 作为子包放在java.awt 中。
  • 我想说的是,不管你是否很难想象,就语言而言,不同的包之间确实没有关系。
  • 阅读相关问题:stackoverflow.com/questions/727844/javax-vs-java-package。另请参阅 Java9 模块依赖结构,因为它与 jdk 包相关:dzone.com/articles/java-9-modularity-jigsaw

标签: java packages


【解决方案1】:

不,没有“更大”的包。结构随着时间的推移而演变,不同的想法和营销影响着命名。

在 java 中不导入包,只导入类。所以在 Java9 之前,除了受包保护的可见性范围(使用不多)以及不需要从同一个包中导入类之外,即使一个类驻留在哪个包中也无关紧要。

子包中的类通常被父包中的类使用,但反之则不然。但这并没有严格的规定。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多