Think in java学习笔记-第5章 隐藏实施过程

进行面向对象的设计时,一项基本的考虑是:如何将发生变化的东西与保持不变的东西分隔开。

为什么?

库的用户(client programmer):必须应该知道他可以使用那些类的成员和方法。

库的创建者:为了以后能对库自由地进行修改与改进,同时保证客户程序员代码不会受到那些变动的影响;因此他需要声明哪些东西是客户程序员可以使用的,哪些是不可使用的。把所有不想被用户使用的都声明为private.

 

5.1包(package):库单元

一、  import关键字:引入java源程序中用到的包或包里的成员,放在java源程序的开头

1、   引入包中所有的类

例:import java.util.*;-引入java/util包中所有的类。

2、   引入包里的一个类

例:import java.util.Vector;-引入java/util包中Vector类。

3、   目的:提供一种特殊的机制,以便管理一个对因特网友好的命名空间Name Space)。即,类名全球唯一。

二、  编译单元:Java创建的一个源码文件。

1、   每个编译单元都必须有一个以.java结尾的名字。在编译单元的内部,可以有且只能有一个公共(public)类,它必须拥有与文件相同的名字(包括大小写形式,但排除.java文件扩展名);这个编译单元中剩下的类(如果有的话),对于这个编译单元包外面的世界是隐藏的,不可以访问的。

2、   编译一个.java文件时,对于.java文件中的每个类,都会得到一个.class文件。一个有效的程序就是一系列.class文件,它们可以封装和压缩到一个JAR文件里(使用Java 1.1提供的jar工具)。Java解释器负责对这些文件的寻找、装载和解释。

三、  包的定义:一个库中一堆.class文件。

1、   package关键字:指明编译单元所属的包

例:package mypackage;

package语句必须作为文件的第一个非注释语句出现。该语句的作用是指出这个编译单元属于名为mypackage的一个库的一部分。或者换句话说,它表明这个编译单元内的public类名位于mypackage这个名字的下面。如果其他人想使用这个类,要么指出完整的名字-.类名,要么与使用import关键字。注意根据Java包(封装)的约定,包名字内的所有字母都应小写。

2、   库设计者,一定要记住packageimport关键字允许我们做的事情就是分割单个全局命名空间,保证我们不会遇到名字的冲突

3、   java中的包没有管理机制,只要我们声明我们的类属于一个包,就可使用包中除private的类。

四、  CLASSPATH的陷阱

1、   Java解释器的工作程序如下:首先,它找到环境变量CLASSPATHCLASSPATH包含了一个或多个目录,它们作为一种特殊的使用,从这里展开对.class文件的搜索。从那个根开始,解释器会寻找包名,并将每个点号(句点)替换成一个斜杠,从而生成从CLASSPATH根开始的一个路径名。随后将它们连接到一起,成为CLASSPATH内的各个条目(入口)。以后搜索.class文件时,就可从这些地方开始查找与准备创建的类名对应的名字。此外,它也会搜索一些标准目录——这些目录与Java解释器驻留的地方有关。

2、   务必保证对于类路径的每个地方,每个名字都仅存在一个类。

3、   CLASSPATH就是类库所在的目录。

4、   当用多个.*引入多个包时,如果存在相同的类名,必须带上包名使用。

五、  包的两个额外的作用

1、   自定义工具库

不论什么对象,只要放入String表达式,他就会被强制转化为这个对象的String表达形式。

2、   利用导入改变行为

5.2 Java访问指示符:“友好的”,publicprivateprotected

Java访问指示符都置于数据成员和方法的最前面。

一、友好的:包中有效。

1、   不指定访问指示符,默认就是friendly.

2、   当前包内的其他所有类都能访问友好的成员和方法,但对包外的所有类来说,这些成员却是私有Private)的,外界不得访问。

二、public:接口访问。

1、   public后面的成员声明适用于所有人,

2、   默认包:处于同一个目录下的.class,没有定义package,这个目录就是这些.class的一个默认包。

三、private:不能接触!

1、   private关键字意味着除非那个特定的类,而且从那个类的方法里,否则没有人能访问那个成员。

四、protected:友好的+子类可以访问

5.3类访问

1、   每个编译单元(文件)都只能有一个public类。每个编译单元有一个公共接口的概念是由那个公共类表达出来的。根据自己的需要,它可拥有任意多个提供支撑的友好类。但若在一个编译单元里使用了多个public类,编译器就会向我们提示一条出错消息。

2、   public类的名字必须与包含了编译单元的那个文件的名字完全相符,甚至包括它的大小写形式。

3、   可能(但并常见)有一个编译单元根本没有任何公共类。此时,可按自己的意愿任意指定文件名。

4、  对于类的访问只有两个选择:友好的或者public。若不愿其他任何人访问那个类,可将所有构建器设为private。这样一来,在类的一个static成员内部,除自己之外的其他所有人都无法创建属于那个类的一个对象

 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值