Java “是什么意思?”;“包装的可观察性”;在JLS第7章中

Java “是什么意思?”;“包装的可观察性”;在JLS第7章中,java,jls,Java,Jls,我正在学习Java语言规范,对于“包的可观察性”的含义,我有一个问题: 当且仅当以下情况之一时,包才可见: 包含包声明的编译单元是可观察的(§7.3) 包的子包是可见的 我的问题是 如何理解包装的可观察性 如何理解第二个条件包的子包是可观察的 JLS中有四个概念可以精确描述: 1) 编译单元是可观察的 2) 编译单元总是可见的 3) 包裹是可见的 4) 包裹总是可见的 1) 让我们假设编译单元“A”是可观察的。 这意味着Java编译器可以找到这个编译单元并解析/编译它的内容 2) 如果任何独

我正在学习Java语言规范,对于
“包的可观察性”
的含义,我有一个问题:

当且仅当以下情况之一时,包才可见:

  • 包含包声明的编译单元是可观察的(§7.3)
  • 包的子包是可见的
我的问题是

  • 如何理解包装的可观察性
  • 如何理解第二个条件
    包的子包是可观察的

  • JLS中有四个概念可以精确描述:

    1) 编译单元是可观察的 2) 编译单元总是可见的 3) 包裹是可见的 4) 包裹总是可见的

    1) 让我们假设编译单元“A”是可观察的。 这意味着Java编译器可以找到这个编译单元并解析/编译它的内容

    2) 如果任何独立于其属性的编译过程都可以找到并解析/编译此编译单元,则编译单元始终是可观察的。 通常,Java实现者提供始终可见的编译单元

    3) 当且仅当包中至少存在一个可观察的编译单元时,包才是可观察的 或者至少存在一个可观察的子包。 我还想指出,包仍然可以包含不可见的编译单元或子包

    4) 当且仅当包中至少存在一个始终可见的编译单元时,包才始终可见 或者至少存在一个子包,该子包总是可见的。 通常,总是可见的子包是由Java实现者提供的。
    我还想指出的是,包仍然可以包含不可见的编译单元或子包。

    这是我之前回答的继续

    我们考虑Oracle、

    中有关“java SE 8”的实现的四个概念。 首先,编译单元是简单文件,包是本地文件系统的文件夹

    1) 我们如何使特定的编译单元在特定的遵从性中可见? 为此,我们使用Java编译器javac并枚举编译初始化,将它们用空格分隔

    例如,如果当前文件夹是D:\Foo1\Foo2,我们将

    javac com\myclass1\myclass1.java com\myclass2\myclass2.java

    我们编译了两个编译初始化: D:\Foo1\Foo2\com\myclass1\myclass1.java D:\Foo1\Foo2\com\myclass2\myclass2.java

    此外,我们还可以使用以下选项修改编译: 1) javac编译器的“-sourcepath”选项。 2) javac编译器的“-classpath”或“-cp”选项。 3) “CLASSPATH”环境变量

    看 更多细节

    我还想指出的是“-sourcepath”只搜索编译单元,而“-classpath”(或-cp”和“classpath”)不仅可以搜索编译单元,还可以搜索编译后的Java类(*.class文件),这些类可以选择性地捆绑在jar/zip文件中。 这些已编译的类现在不是编译单元,但在编译之前是编译单元。 我们可以将它们视为“修改的”编译单元或编译单元,在此之前进行了一些处理。 因此,通过上述三个选项,我们可以向特定编译添加更多编译单元

    2) 始终可见的编译单元与“Java SE 8”的安装捆绑在一起,位于“…\jdk1.8.0_51\jre\lib”中。 它们中的大多数都放在众所周知的“rt.jar”中,但放在其他jar中的编译单元也总是可见的。 正如您所看到的,它们被绑定为位于jar文件中的编译类文件,因此它们是“修改的”编译单元

    3) 如果您查看“…\jdk1.8.0_51\jre\lib”,您将发现许多始终可见的包:

    java-根据规范始终可见

    java.lang-根据规范始终可见

    java.io-根据规范始终可见

    java.applet

    java.awt

    java.bean

    java.math

    java.net

    java.nio

    java.rmi

    java.security

    java.sql

    java.text

    java.time

    java.util


    您也可以将自己的lib放在“…\jdk1.8.0\u 51\jre\lib\ext”中,以确保lib始终可见。

    我以前已经读过这个主题,但它无法说服我,主题是“2001-3-8 10:23pm”。