Java编程思想—第6章 访问权限控制

  • 如何把变动的事物与保持不变的事物区分开来
  • 访问权限控制的等级,从最大权限到最小权限依次为:publicprotected包访问权限(没有关键词)和private
  • 其中仍旧存在着如何将构件捆绑到一个内聚的类库单元中的问题。对于这一点,Java用关键字package加以控制

6.1 包:库单元

  1. 包内包含有一组类,它们在单一的名字空间之下被组织在了一起
  2. 由于名字之间的潜在冲突,在Java中对名称空间进行完全控制并为每个类创建唯一的标识符组成就成为了非常重要的事情
import java.util.*;
  1. 每个编译单元只能有一个public类,否则编译器就不会接受
  2. 代码组织
    a. 当编译一个.java文件时,在.java文件中的每个类都会有一个输出文件,而该输出文件的名称与.java文件中的每个类的名称相同,只是多了一个后缀名.class
    b. Java可运行程序是一组可以打包并压缩为一个Java文档文件(JAR,使用Java的jar文档生成器)的.class文件。Java解释器负责这些文件的查找、装载和解释。
    c. 类库实际上是一组类文件。其中每个文件都有一个public类,以及任意数量的非public
    d. 如果使用package语句,它必须是文件中除注释以外的第一句程序代码。在文件起始处写:(注意,Java包的命名规则全部使用小写字母,包括中间的字也是如此)
    e. packageimport关键字允许你做的,是将单一的全局名字空间分隔开,使得无论多少人使用Internet以及Java开始编写类,都不会出现名称冲突问题
package access.mypackage;
  1. 创建独一无二的包名
    a. 按照惯例,package名称的第一部分是类的创建者的反顺序的Internet域名
    b. 在使用了有冲突名字的情况下,必须返回到指定全名的方式
  2. 定制工具库
    a. 用唯一的包命名方式,创建自己的util库
  3. import改变行为
    a. C语言的条件编译功能,主要用于跨平台编译,Java中不需要这个功能
    b. 条件编译还有其他一些有价值的用途。调试就是一个很常见的用途
  4. 对使用包的忠告
    a. 务必记住,无论何时创建包,都已经在给定包的名称的时候隐含的指定了目录结构。这个包必须位于其名称所指定的目录之中,而该目录必须是以CLASSPATH开始的目录中可以查询到的。
    b. 注意,编译过的代码通常放置在与源代码的不同目录中,但是必须保证JVM可以使用CLASSPATH可以找到该路径

6.2 Java访问权限修饰词

  1. 如果不提供任何访问权限修饰词,则意味着它是“包访问权限
  2. 包访问权限
    a. 当前的包中的所有其他类对那个成员都有访问权限,但对于这个包之外的所有类,这个成员却是private
    b. 提供访问器(accessor)和变异器(mutator)方法(也称作get/set方法),已读取和改变数值。
  3. public:接口访问权限
    a. 使用关键字public,就意味着public之后紧跟着的成员声明自己对每个人都是可用的,尤其是使用类库的客户程序员更是如此
    b. 默认包:同处于相同的目录并且没有给自己设定任何包名称,jJava将这样的文件自动看作是隶属于该目录的默认包之中,于是他们为该目录中所有其他的文件都提供了包访问权限。
  4. private:你无法访问
    a. 关键字private的意思是,除了包含该成员的类之外,其他任何类都无法访问这个成员
    b. 可能想控制如何创建对象,并阻止别人直接访问某个特定的构造器(或全部构造器)
    c. 不能因为在类中某个对象的引用是private,就认为其他的对象无法拥有该对象的public引用。
  5. protected:继承访问权限
    a. 有时,基类的创建者希望有某个特定成员,把对它的访问权限赋予派生类而不是所有类

6.3 接口和实现

  1. 接口和具体实现进行分离
  2. 为了清晰起见,可能会采用一种将public成员置于开头,后面跟着protected包访问权限和private成员的创建类的形式。这样做仅能使程序阅读起来稍微容易一些,因为接口和具体实现仍旧混在一起

6.4 类的访问权限

  1. 对于类的访问权限,仅有两种选择:包访问权限public
  2. 如果不希望其他人对该类拥有访问权限,可以把所有的构造器都指定为private,从而阻止任何人创建该类的对象,但有一个例外,就是你可以在该类的static成员内部创建。

6.5 总结

  1. 无论是在什么样的关系之中,设立一些为各成员所遵守的界限始终是很重要的。
  2. 本章讨论了类是如何被构建成类库的:首先,介绍了一组类是如何被打包到一个类库中;其次,类是如何控制对其成员的访问的。
  3. 类的公共接口是用户真正能够看到的,所以这一部分是在分析和设计的过程中决定该类是否正确的最重要的部分。
发布了77 篇原创文章 · 获赞 20 · 访问量 5768

猜你喜欢

转载自blog.csdn.net/qq_42396168/article/details/105025359