访问权限控制的等级,从最大权限到最小权限依次为:public、protected、包访问权限和private。

6.1 包:库单元

       但编写一个java源代码文件时,此文件通常被称为编译单元。每个编译单元都必须有一个后缀名.java,而在编译单元内则可以有一个public类,该类的名称必须与文件的名称相同(包括大小写,但不包括文件的后缀名.java)。每个编译单元只能有一个public类,否则编译器就不会接受。如果在该编译单元有额外的类的话,那么在包之外的师姐是无法看到这些类的,这是因为它们不是public类,而且它们主要是用来为public类提供支持的。

       当编译一个.java文件时,在.java文件的每个类都会有一个输出文件,而该输出文件的名称与.java文件中的每个类的名称相同,只是多了一个后缀.class。因此,在编译少量.java文件之后,会得到大量的.class文件。java可运行程序是一组打包并压缩为一个JAVA文档文件(JAR,使用JAVA的jar文档生成器)的.class文件。java解释器负责这些文件的查找、装载和解释。

        身为一名类库设计人员,很有必要牢记:package和import关键字允许你做的,是将单一的全名名字空间分隔开,使得无论多少人使用internet和java开始编写类,都不会出现名称冲突问题。

      安装惯例,package名称的第一部分是类的创建者的反顺序的internet域名。

      第二部分是把package名称分解为你机器上的一个目录。

     java解释器的运行过程如下:首先,查找环境变量CLASSPATH。CLASSPATH包含一个或多个目录,用作查找.class文件的根目录。从根目录开始,解释器获取包的名称并将每个句点替换成反斜杠,以从CLASSPATH根中产生一个路径名称(于是,package  foo.bar.baz就变成foo\bar\baz或者foo/bar/baz,这一切取决于操作系统)。得到的路径会与CLASSPATH中的各个不同的项相连接,解释器就在这些目录中查找与你所要创建的类名称相关的.class文件。

       不要错误地认为java总是将当前目录视作是查找行为的起点之一。如果你的CLASSPATH之中缺少一个“.”作为路径之一的话,java就不会查找那里。

       java没有c的条件编译功能,该功能可以使你不必要更改任何程序的代码,就能够切换开关并产生不同的行为。

6.2 java访问权限修饰词

       取得对某成员的访问权限的唯一途径是:

      1. 使该成员成为public。

       2. 通过不加访问修饰词将其他类放置于同一个包内的方式给成员赋予包访问权。是包内的其他类也就可以访问该成员了。

      3. 继承而来的类既可以访问public成员也可以访问protected成员。只有在两个类都处于同一个包内时,它才可以访问包访问权限成员。但现在不必担心继承和protected。

      4. 提供访问器(accessor)和变异器(mutator)方法(也称作get和set方法),以读取和改变数值。

6.3 接口和实现

      为了清除起见,可能会采用一种将public成员置于开头,后面跟着protected、包访问权限和private成员的创建类的形式。这样做的好处是类的使用者可以从开头读起,首先阅读对于他们而言最为重要的部分,等到遇见作为内部实现细节的非public成员时停止阅读。

       类既不可以是private的,也不可以是protected的。但是,一个内部类可以是private或是protected的,但那时一个特例。