进行面向对象的设计时,一项基本的考虑是:如何将发生变化的东西与保持不变的东西分隔开。”
1.包:库单元
我们用 import 关键字导入一个完整的库时,就会获得“包”( Package)。例如:
import java.util.*;
它的作用是导入完整的实用工具( Utility)库,若想导入单独一个类,
可在 import 语句里指定那个类的名字:
import java.util.Vector;
之所以要进行这样的导入,是为了提供一种特殊的机制,以便管理“命名空间”( Name Space)。我们所有 类成员的名字相互间都会隔离起来。位于类 A 内的一个方法 f()不会与位于类 B 内的、拥有相同“签名” (自变量列表)的 f()发生冲突。
为 Java 创建一个源码文件的时候,它通常叫作一个“编辑单元”(有时也叫作“翻译单元”)。每个编译单 元都必须有一个以.java 结尾的名字。而且在编译单元的内部,
可以有一个公共( public)类,它必须拥有 与文件相同的名字(包括大小写形式,但排除.java 文件扩展名)。如果不这样做,编译器就会报告出错。 每个编译单元内都只能有一个 public 类(同样地,否则编译器会报告出错)。那个编译单元剩下的类(如果 有的话)可在那个包外面的世界面前隐藏起来,因为它们并非“公共”的(非public),而且它们由用于主 public 类的“支撑”类组成。
2.package的作用
若在一个文件的开头使用下述代码:
package mypackage;
那么
package 语句必须作为文件的第一个非注释语句出现。
该语句的作用是指出这个编译单元属于名为 mypackage 的一个库的一部分。或者换句话说,它表明这个编译单元内的 public 类名位于 mypackage 这个名 字的下面。如果其他人想使用这个名字,要么指出完整的名字,要么与mypackage 联合使用 import 关键字 (使用前面给出的选项)。注意根据 Java 包(封装)的约定,名字内的所有字母都应小写,甚至那些中间单
词亦要如此。例如,假定文件名是 MyClass.java。它意味着在那个文件有一个、而且只能有一个 public 类。而且那个类 的名字必须是