我學習Java語言規範,「一包的可觀測性」意義,我在JLS §7.4.3 - Observability of a Package關於"Observability of a Package"
含義的問題:什麼是第7章JLS
包是可觀察的,如果和僅在以下情況下:
- 包含該包的聲明的編譯單元是可觀察的(第7.3節)。
- 包的一個子包是可觀察的。
我的問題是
- 如何理解包
- 如何理解第二個條件的可觀測
A subpackage of the package is observable
我學習Java語言規範,「一包的可觀測性」意義,我在JLS §7.4.3 - Observability of a Package關於"Observability of a Package"
含義的問題:什麼是第7章JLS
包是可觀察的,如果和僅在以下情況下:
- 包含該包的聲明的編譯單元是可觀察的(第7.3節)。
- 包的一個子包是可觀察的。
我的問題是
A subpackage of the package is observable
有在JLS四個概念,它是精確到:
1)A編譯單元是可觀察 2)編譯單元總是可觀察到的 3)A包裝是可觀察到的 4)A包裝是可觀察到的總
1)讓我們假設編譯單元「A」是可觀察的。 這意味着Java編譯器可以以某種方式找到這個編譯單元並解析/編譯它的內容。
2)如果獨立於其屬性的編譯過程可以找到並解析/編譯此編譯單元,則編譯單元總是可觀察的。通常可觀察的編譯單元由Java實現者提供。
3)一個包是可觀察的,當且僅當存在該包的至少一個可觀察的編譯單元 或者存在至少一個可觀察的子包。 另外我想指出的是,軟件包仍然可以包含不可觀察的編譯單元或子包。
4)只要存在至少一個總是可觀察到的此包的編譯單元,或者至少存在一個始終可觀察的子包,則該包總是可觀察的。 通常,可觀察的子包由Java實現者提供。 另外我想指出的是,軟件包仍然可以包含不可觀察的編譯單元或子包。
這是我以前的答案的延續。
讓我們考慮一下上述四個概念是如何與Oracle實現「Java SE 8」相關的。
首先編譯單元是簡單文件,包是本地文件系統的文件夾。
1)我們如何編制特定的編譯單元在特定的編譯中是可觀察的? 爲此,我們使用Java Compiler javac並枚舉Compilation Inits將它們與空格分開。
例如,如果當前文件夾是d:\ Foo1 \ foo2的,我們寫
javac的COM \ MyClass1的\ MyClass1.java COM \ myclass2 \ MyClass2.java
我們編譯兩個編譯inits: d:\ Foo1 \ foo2的\ COM \ MyClass1的\ MyClass1.java d:\ Foo1 \ foo2的\ COM \ myclass2 \ MyClass2.java
此外,我們可以修改我們的編輯使用下列選項: 1)「-sourcepath 「選項的javac編譯器。 2)javac編譯器的「-classpath」或「-cp」選項。 3)「CLASSPATH」環境變量。
請參閱http://docs.oracle.com/javase/8/docs/technotes/tools/windows/javac.html 瞭解更多詳情。另外我想說明的是「-sourcepath」只搜索編譯單元,但「-classpath」(或-cp「和」CLASSPATH「)不僅可以搜索編譯單元,還可以搜索編譯Java類(* .class文件),它們可以被捆綁在jar/zip文件中 這個編譯的類現在不是編譯單元,但它們是編譯之前的編譯單元 我們可以將它們視爲「修改過的」編譯單元或編譯單元, 因此,通過以上三個選項,我們可以在我們的特定彙編中添加更多編譯單元。
2)Always Observable編譯單元與i安裝「Java SE 8」並位於「... \ jdk1.8.0_51 \ jre \ lib」中。他們中的大多數被放置在衆所周知的「rt.jar」中。但放置在其他罐子裏的編輯單元也總是可觀察的。 正如你所看到的,它們被捆綁爲位於jar文件中的編譯類文件,因此它們是「修改」的編譯單元。
3)如果你通過看 「... \ jdk1.8.0_51 \ jre的\ LIB」,你會發現相當多的總是觀察到的包:
爪哇 - 根據規範總是觀察到
的java .lang - 始終觀察的依據規範
java.io - 根據規範
的java.applet
的Java總是觀察到.awt
java.beans中
的java.math
java.net
java.nio中
java.rmi中
java.security
的java。 sql
的java.text
java.time
的Java。UTIL
.........
你也可以將自己的庫到 「... \ jdk1.8.0_51 \ JRE \ lib中\分機」 爲了你的庫總是觀察到。
http://www.coderanch.com/t/198137/java-programmer-SCJP/certification/Observable-packages – stinepike
我以前已經閱讀過這個話題,但它無法說服我,而且話題已貼出「2001-3-8 10:23 pm」。 – Alex