Which compilation units are observable is determined by the host system. However, all the compilation units of the package java and its subpackages lang and io must always be observable. The observability of a compilation unit influences the observability of its package (��7.4.3).
7.4.3 Observability of a Package
A package is observable if and only if either:
A compilation unit containing a declaration of the package is observable.
A subpackage of the package is observable.
One can conclude from the rule above and from the requirements on observable compilation units, that the packages java, java.lang, and java.io are always observable.
7.4.4 Scope of a Package Declaration
The scope of the declaration of an observable (��7.4.3) top level package is all observable compilation units (��7.3). The declaration of a package that is not observable is never in scope. Subpackage declarations are never in scope.
It follows that the package java is always in scope (��6.3).
Package declarations never shadow other declarations.
The above quote is from jls 7.3; my problem is that no defination of "observable" as for complilation units are given in jls,and the "observable" as for package. what functionality they serve to the language? and how could i determine which compilation units are observable given a particular host system?
i also dont quite understand the implication of the "scope" of a package, how i regard "Subpackage declarations are never in scope."?