}
软件包的名称表明一个存放在特定路径下的特定的软件包,存放在不同文件夹中的同名的软件包之间、或者不同软件包中同名的类之间都没有特殊的关系;在上面的第一个例子中,软件包的名称是MyStuff,第二个例子中软件包的名称是MyStuff.MySubPackage。一个软件包可以存放在另外一个软件包的子文件夹中,但是,这两个软件包中的类却没有关系;类似的,MyStuff.MyClass和MyStuff.MySubPackage.MyClass这两个类之间也没有特殊的关系。
类路径
类路径是一些文件夹(或目录)的序列,这些文件夹组合起来形成一个应用程序的默认软件包;所有命名的软件包都可以在类路径上文件夹的子文件夹中找到,软件包文件夹是类路径文件夹的一个子文件夹。比如,假定类路径由下面的文件夹组成:
C:\Windows\Java\Classes
C:\Windows\Java\Lib
C:\MyLib
rary
类文件C:\Windows\Java\Classes\Utilities.class就直接存放在默认的软件包中。
现在,假定通过编译下面命名为MyClass.class文件中的几行代码来创建一个类路径上的类文件:
packageMyStuff;
publicclassMyClass
{
...
}
MyStuff.MyClass文件可能在以下文件夹的任意一个当中:
C:\Windows\Java\Classes\MyStuff*C:\windows\Java\Lib\MyStuff
C:\MyLibrary\MyStuff
另外,大多数的Java虚拟机(VM)能够使用以ZIP、JAR或CAB形式存储的类文件,不过,这些ZIP、JAR或CAB文件必须显式地列在类路径当中;这些压缩文件可以包含别的文件,也可以包含带有许多子文件夹的文件夹的信息。
可以用下面两个文件夹来更新类路径:
C:\Windows\Java\Classes\Classes.ZIP
C:\Library\MyClasses.CAB
现在,类文件MyClass.class可能出现在Classes.Zip或者MyClasses.CAB中。如果它包括在MyClasses.CAB中,则把它保存在子文件夹MyStuff中。
访问控制
跟访问有关的三个访问修饰字:public(公共),private(私有)和protected(保护)。
我们已经介绍过没有关联关键字的第四种访问方式:default
access(默认访问);具有默认访问的项只能被在同一软件包中定义的项访问;由于它只给相同软件包中的成员分配访问权限,所以也称它为软件包访问(packageaccess)。比如,在下面的代码中,一个类和一个方法是公共的,同时它们都有默认访问:
packageMyStuff;
publicclassMyClass
{
publicvoidgetMoreStuff()
{
...
}
voiddoSomeMore()
{
...
}
}
classHelper
{
}
通过上面的介绍可以知道,下面的说法都是正确的:
*任意类都可以定义MyStuff.MyClass类型的成员变量;
*任意类中的方法可以定义MyStuff.MyClass类型的局部变量;
*如果给定一个MyStuff.MyClass对象,则任意类中的方法可以调用getMoreStuff方法;
*只有在MyStuff软件包中的类才可以定义MyStuff.Helper类型的成员变量;
*只有在MyStuff软件包的类中的方法才可以定义MyStuff.Helper类型的局部变量;