Java隐藏实施过程
进行面向对象的设计时,一项基本的考虑是:如何将发生变化的东西与保持不变的东西分隔开
这一点对于库来说是特别重要的,
客户程序员知道一旦新版本的库出台,自己不需要改写代码
库的创建者必须能自由地进行修改与改进,同时保证客户程序员代码不会受到那些变动的影响
包:库单元
我们用 import 关键字导入一个完整的库时,就会获得“包”( Package)。例如:import java.util.*;
包”也由一系列类文件构成。每个文件都有一个 public类(并没强迫使用一个 public 类,但这种情况最很典型的)
所以每个文件都有一个组件。如果想将所有这些组件(它们在各自独立的.java 和.class文件里)都归纳到一起,那么package 关键字就可以发挥作用)。若在一个文件的开头使用下述代码:package mypackage;那么package语句必须作为文件的第一个非注释语句出现。该语句的作用是指出这个编译单元属于名为mypackage 的一个库的一部分。
或者换句话说,它表明这个编译单元内的 public类名位于 mypackage这个名字的下面。如果其他人想使用这个名字,要么指出完整的名字,要么与mypackage 联合使用import 关键字(使用前面给出的选项)。
注意根据Java 包(封装)的约定,名字内的所有字母都应小写,甚至那些中间单词亦要如此。例如,假定文件名是MyClass.java。它意味着在那个文件有一个、而且只能有一个 public类。而且那个类的名字必须是MyClass(包括大小写形式):
package mypackage;
public class MyClass {
// . . .
现在,如果有人想使用 MyClass,或者想使用 mypackage内的其他任何 public 类,他们必须用import关键字激活mypackage 内的名字,
使它们能够使用。另一个办法则是指定完整的名称:mypackage.MyClass m = new mypackage.MyClass();
import关键字则可将其变得简洁得多:
创建独一无二的包名
采用把域名反写的方式:www.baidu.com package com.baidu.www
自动编译
为导入的类首次创建一个对象时(或者访问一个类的static 成员时),编译器会在适当的目录里寻找同名的.class 文件(所以如果创建类 X的一个对象,就应该是 X.class)。若只发现X.class,它就是必须使用的那一个类。然而,如果它在相同的目录中还发现了一个 X.java,编译器就会比较两个文件的日期标记。如果X.java 比X.class 新,就会自动编译X.java,生成一个最新的 X.class。
对于一个特定的类,或在与它同名的.java 文件中没有找到它,就会对那个类采取上述的处理。
Java 访问指示符
针对类内每个成员的每个定义,Java 访问指示符 poublic,protected 以及private都置于它们的最前面——无论它们是一个数据成员,还是一个方法。每个访问指示符都只控制着对那个特定定义的访问。如果它们前面什么都没有,我们称之为默认的,无修辞的,友好