Java编程思想 - 第六章、访问权限控制

| 分类 Java  | 标签 Java编程思想 

###本章主题:

本章重点是类的public、protected、private、package的访问权限。权限从大到小为:

public、protectd(也提供包访问权限)、包访问权限(没有关键字修饰)、private

###1. 杂碎的知识点

  1. CLASSPATH变量就是让编译器找到.class文件和jar包用的。对于.class文件,你指定目录就可以了(一般为bin目录);而对于jar包,因为是独一无二的,所以我们必须指定完整的路径,比如/data0/lib/rt.jar。
  2. 指定CLASSPATH之后,当编译器遇到库的import之后,就开始在CLASSPATH所指定的目录中查找,然后从全部.class文件中找出对应名称的类的.class文件,之后就可以正常使用了。
  3. JAVA的默认包具有包访问权限。也就是说,如果你在一个项目中,没有为某N个编译单元指定包结构,那么它们就处于默认包下面,等同于具有共同的包结构,所以它们可以互相调用。
  4. 首先JAVA没有C那样方便的条件编译功能,以前在C中,我们可以在代码中使用条件编译,最方便之处就是可以一个标记完成运行/调试,-DFLAG即可。而JAVA去掉此功能的原因是这样的:

    C在绝大多数情况下是使用此功能来解决跨平台问题的,即程序代码的不同部分是根据不同的平台来编译的。由于JAVA自身可以自动跨越不同的平台,因此这个功能对JAVA而言是没有必要的。但是对于调试而言,使用这个标记还是很方便的。在Java中,可以通过不同的package来完成,调试用package debug,发布用package online。

  5. 看《head first java》没注意import static这个用法,import static就是少打几个字,但是会让程序的可读性降低。比如一个add()方法,你都不知道调用的是哪个包里面的方法。

###2. JAVA权限访问

主要有4个权限修饰,范围从大到小排序后:

  1. public:import之后包内包外可以使用
  2. protected:继承访问权限,只有子类可以访问。同时,protected也提供包访问权限
  3. 包访问权限:(类前面没有权限修饰符)一个包的代码可以访问本包内所有代码,但是本包对外界成员是透明的、不可见的
  4. private:除本类外包内包外均无法访问

控制对成员的访问权限有两个原因:

  1. 为了使用户不要碰触那些他们不该碰触的地方,这些部分对于类内部的操作是有必要的,但是它并不属于客户端程序员所需接口的一部分
  2. 为了重构。只要当前版本提供的公共接口没有改变,就不会因为底层数据/方法(设为private)的改变受到影响。然后我们开发完成新的功能后只需要添加新的接口,就不会影响原有代码,在以后版本使用中使用新的接口就可以了。

当然,上面的访问权限主要是针对类的数据成员的,而对于类来说,一般只有两种:public和包访问权限。因为private将使得除本类以外的其它类都无法访问该类;而protected则是该类的子类和包内能够访问,没有对外接口,也不合适。


上一篇     下一篇