访问控制(或隐藏具体实现)与“最初的实现并不恰当”有关.
1.包
- 类库是一组类文件,其中每个文件都有一个public类,以及任意数量的非public类.
- 每个文件都有一个构件,如果希望这些构建从属于同一个群组,就可以使用package关键字.
- 如果使用package关键字,它必须是除注释以外的第一句程序代码.
- package和import:将单一的全局名字分隔开,解决命名冲突问题.
- 一个包从未真正将被打包的东西包装成单一的文件,并且一个包可以由许多.class文件构成,一种合乎逻辑的做法是将特定包的所有.class文件都置于一个目录下(利用操作系统的层次化的文件结构来解决混乱问题(一种方式)).
- Java解释器的运行过程:找到环境变量CLASSPATH,其目录作为查找.class文件的根目录;从根目录开始,解释器获取包的名称并将.替换成路径符;连接路径.
- JDK2即使未设立CLASSPATH,也可以编译并运行基本的Java程序.
- 同一程序中有冲突的名字,必须指定全名.
- 静态导入 import static.
- Java没有C的条件编译功能(不更改任何程序代码,就能切换开关并产生不同的行为).
- 调试功能在开发过程中是开启的,而在发布的产品中式禁用的.
2.Java访问权限修饰词
- 默认包:如果没有给类设定包名称,则该类隶属于该目录的默认包之中.
- 包访问权限:默认访问权限(friendly).
- public:接口访问权限.
- private:除该类之外,其他任何类都无法访问(典型例子:构造器私有化).
- protected:继承访问权限.
- 获得某成员的访问权的途径:1.使该成员成为public;2.不加修饰符并置于同一个包中;3.使用继承;4.提供访问器(accessor)和变异器(mutator)方法(get/set方法).
3.接口和实现
- 访问权限的控制常被成为是 具体实现的隐藏.
- 把数据和方法包装进类中,以及具体实现的隐藏,常共同被称作是 封装.其结果是一个同时带有特征和行为的数据类型.
- 访问权限控制将权限的边界划在了数据类型的内部,原因:1.要设定客户端程序员可以使用和不可以使用的界限;2.将接口和具体实现进行分离.
- 类浏览器:一种以非常有用的方式来查阅所有可用的类,并显示出可用成员的工具.===========
4.类的访问权限
- 每个编译单元(文件)都只能有一个public类.
- public类的名称必须完全与含有该编译单元的文件名相匹配,包括大小写.
- 编译单元内完全不带public类也是可能的.
- 类既不可以是private,也不可以是protected,只能是包访问权限或者public.
- 如果不希望其他任何人对该类拥有访问权限,可以把所有的构造器都制定为private,从而阻止任何人创建该类的对象,但是有一个例外,就是在该类的static成员内部可以创建.
- 如果一个包访问权限的类的某个static成员是public的话,则客户端程序员仍旧可以调用该static成员,尽管他们并不能生成该类的对象.
END