《Java编程思想》笔记6.访问权限控制


点击进入个人博客

6.1包:库单元

import java.util.ArrayList;
import java.util.*;
  • 当编写一个Java源代码文件(编译单元)时,每一个编译单元必须有一个后缀.java,而在编译单元内则能够有至多一个public类,该类名必须和文件名相同。
  • 若是编译单元内还有其余的类,那么在包以外是不可见的。

6.1.1 代码组织

  • 当编译一个.java文件时,在.java文件中的每一个类都会有一个输出文件,而该输出文件的名称与.java文件中的每一个类名称相同,只是后缀名改成.class。
  • Java可运行程序是一组能够打包并压缩为一个Java文档文件(JAR)的.class文件,Java解释器负责这些文件的查找、状态和解释。
  • package语句必须是文件中除注释之外的第一句程序代码。
  • Java包命名规范使用小写字母。
  • packageimport关键字容许你作的,是将单一的全局名字空间分割开,防止名称冲突。

6.1.2 建立独一无二的包名

  • package名称的第一部分是类的建立者的反顺序域名。
  • package名称分解为你机器的一个目录。

Java解释器的执行过程:java

  1. 找到环境变量CLASSPATH,CLASSPATH包含一个或多个目录,用于查找.class文件的根目录。
  2. 从根目录开始,解释器包的名称并将每个.替换成\/
  3. 把CLASSPATH和包路径拼接获得最终目录,并查找.class文件。
  • Sun公司将Java2中的JDK改造的更聪明了一些,未设置CLASSPATH也能够编译并运行Java程序。
  • 不要错误的任务Java老是将当前目录视做查找行为的起点,CLASSPATH中的.表示当前目录
  • 引入两个名称相同的类会引发冲突,因此尽可能不要用import *的方式

6.1.3 定制工具库

程序员

6.1.4 用import改变行为

Java没有C的条件编译功能,该功能可使你没必要更改任何程序代码,就可以切换开关并产生不一样的行为。(Java去掉此功能多是由于C在绝大数状况下是用此功能来解决跨平台的问题的,即程序代码的不一样部分是根据不一样的平台来编译的。因为Java自己能够自动跨越不一样的平台,所以这个功能对Java而言就没有必要了。)
然而,条件编译还有其余一些有价值的用途。调试就是一个很常见的用途。调试功能在开发过程当中是开启的,而在发布的产品中是禁用的。能够经过修改被导入的package的方法来实现这一目的,修改的方法是将你程序中的代码从调试版改成发布版。这样的技术适用于任何种类的条件代码。编程

6.1.5 对使用包的忠告

  • 包必须位于其名称所指定的目录中,该目录必须是在以CLASSPATH开始的目录中能找到的。
  • 编译后的代码一般放在与源代码不一样的目录中,必须保证JVM(在《Java编程思想》第四版中,此处被错误的写成类JVN!!!)使用CLASSPATH能够找到该路径。

6.2Java访问权限修饰符

publicprotected包访问权限privateide

取得对某成员(属性和方法)的实现方法有下面四种状况:
  1. 权限设置为public。
  2. 默认包访问权限,在同一包中的其余类,能够访问。
  3. 权限设置为public或者protected,经过继承的子类能够访问。
  4. 设置为private,提供访问器和变异器方法(get/set)

6.2.1 包访问权限

  • 若是不提供访问权限关键词,则意味是“包访问权限(也被称做friendly)”,即默认访问权限。
  • 包访问权限:同一个包中的全部其余类对那个成员有访问权限,包以外的没法访问。
  • 包访问权限为把类聚在一个包中的作法提供了意义和理由

6.2.2 public:接口访问权限

  • 使用public关键字,意味着被它修饰的成员对全部类可见。

6.2.3 private:没法访问

  • private的意思是,除了包含该成员的类外,其余任何类都没法访问这个成员。
  • 若是默认构造方法被private修饰,那么这个类没法被继承。

6.2.4 protected:继承访问权限

  • 基类的建立者但愿某些特定成员,把它的访问权限赋予派生类也不是全部类。
  • protected也提供包访问权限

6.3 接口和实现

  • 访问权限的控制一般被称为是具体实现的隐藏
  • 封装:把数据和方法包进类中,以及其具体实现的隐藏共同称为封装
  • 将接口和实现分离

6.4 类的访问权限

  • 每一个编译单元最多一个public
  • public类名必须和文件名彻底相同
  • 编译单元内能够没有public类,此时能够随意命名文件名,但这种方法不多用。
  • 类的访问权限只有两种(内部类除外):public包访问权限
  • 若是不但愿其余人对该类拥有访问权限,能够把构造器设置为private单例模式中会用这种设置。

6.5 总结

控制对成员的访问权限有两个缘由
  • 第一个缘由:要设定客户端程序员可使用和不可使用的界限。
  • 第二个缘由,也是最重要的缘由,是为了让类库设计者能够更改类的工做方式,而不会影响对客户端程序员产生重大影响。
相关文章
相关标签/搜索