拾捌——包及访问权限
包是一个文件夹,它是类的一种特殊的性质,可以更合理地管理大量的类文件,设置他人对类成员的访问权等。
在用 Java 开发大型项目时,通常要把类分门别类地存到文件里,再将这些文件一起编译执行,这样的程序代码将更易于维护。同时在将类分割开之后,对于类的使用也就有了相应的访问权限。
一、包的概念及使用
1.包( package )的基本概念
所谓的包( package )指的就是一个文件夹,即在不同的文件夹之中可以保存同名的类文件。
包的使用方法:在类或接口的最上面一行加上 package 的声明。通常包全部用小写字母命名。
package 的声明方法如下。
package paceage名称[.package名称2.package名称3……];
程序中如果有 package 语句,该语句一定是源文件中的第一条可执行语句,它的前面只能有注释或空行。另外,一个文件中最多只能有一条 package 语句。
经过 package 的声明之后,同一文件内的接口或类就都会被保存在相同的 package 中。
包的名字有层次关系,各层之间以点分隔。包层次必须与 Java 开发系统的文件系统结构相同。
若包声明如下:package java.awt.a,则文件中的接口和类都存放在 …java\awt\a 目录下。
举例:
//package的使用
package demo.java; //声明package
class Person
{
public String talk()
{
return "Person→talk()";
}
}
class TestPackage
{
public static void main(String[] args)
{
System.out.println(new Person().talk());
}
}
2.包的导入
使用包可以将功能相似的若干类保存在一个文件目录之中,但是这样一来就有可能出现包之间的互相访问问题,当一个程序需要其他包中类的时候可以通过 import 完成导入操作。package 导入的方法如下:
import package 名称.类名称;
若某个类需要被访问时,则必须把这个类公开出来,即此类必须声明成 public。通过 import 命令,可将某个 package 内的整个类导入,后续程序可直接使用类名称,而不用再写上被访问的 package 的名称。
若在不同的 package 中存在相同类名的 public 类,若要访问某个 public 类的成员时,在程序代码内必须明确地知名 “ 被访问package的名称.类名称 ”。
如:
package demo.java.a; //声明package
public class Person
{
public String talk() //类中的方法
{
return "Person→talk()"; //返回一串字符串
}
}
//声明一个 demo.java.b包,并调用demo.java.a中的类方法
package demo.java.b;
import demo.java.a.Person;
//将demo.java.a包中的Person类导入到此包之中
class TestPackage2
{
public static void main(String[] args)
{
//调用demo.java.a中的方法并输出
System.out.println(new Person().talk());
}
}
如果说一个项目之中有几百个类时,为了方便导入可以使用 “ 包.* ” 的形式完成。虽然使用的是 “ 包.* ” ,但实际上并不表示此包之中的所有类都会被导入,导入的时候也只能是导入所需要的类,不需要的类是不会有任何加载的,所以分开导入和使用 “ * ” 导入从性能上讲是完全一样的。
另外,上述程序也可写成如下形式:
//包的导入使用
package demo.java.b;
class TestPackage3
{
public static void main(String[] args)
{
//在程序中将写出所用类的具体位置
System.out.println(new demo.java.a.Person().talk());
}
}
在程序中没有使用 import 语句,但是在语句中使用 Person 类的时候使用了 “ 包名.类名 ” 的方式,在程序中也可以使用此方法来使用非本类所在的包中的类。