当前位置:课程学习>>第四章 面向对象基础>>文本学习>>知识点三
一、软件包的概念
Java中的所有的资源都是以文件方式组织,其中主要包含大量的类文件。Java以“包”的形式,采用了目录树形结构来管理这些类文件。“包”机制是Java所特有的,它把多个相互关联的类和接口的类文件存放在一起成为一组,被称为包。标准Java库分为了许多包:java.*,javax.*,org.*等,包是分层次的,包与包之间用“.”来分隔,实际上相当于目录分隔符。
Java中的软件包为类文件提供了访问保护和名字空间管理。主要体现在以下几点:
(1) 不同包中的类可以同名,避免了多用户协同开发同一系统时相同类名的冲突;
(2) 同一个包内的类或接口一般都是相互关联的,方便用户查找和使用;
(3) 同一个包内的类和接口可以相互访问,但跨包访问受到限制。
二、创建软件包(package)
缺省情况下,Java会把编译生成的字节码文件(.class)都存放到当前目录下。此外可以使用package语句来创建软件包,package语句必须是Java源程序文件的第一条语句。格式为:
package 包名
【例4.14】软件包的创建。
1 //PackageUsage.java
2 package mypackage.lib;
3 public class PackageUsage
4 {
5 int a=10;
6 public int add(int b)
7 {
8 return a+b;
9 }
10 public void print(int c)
11 {
12 System.out.println("sum is "+c);
13 }
14 }
该文件编辑完毕后,保存到d:\javacode目录下。程序中的包名为mypackage.lib,编译成功后会在指定目录或classpath中指定的目录下创建一个子目录,子目录的名字为mypackage\lib,其中“.”代表Windows下的目录分隔符\,编译生成的PackageUsage.class文件自动拷贝到该子目录下。不过对于Java程序的编译需要加上-d选项。具体用法为:
javac –d 存放包的目录 .java文件所在目录和文件名
如果存放包的目录为当前目录,则使用“.”表示即可。例如【例4.14】中这个软件包想存放到d:\myjava目录下。此时需要在d盘下先建立myjava目录,然后打开DOS命令行窗口,切换到d:\javacode目录下,然后输入:javac –d d:\myjava PackageUsage.java(回车)。这样Java系统会自动在d:\myjava目录创建两层子目录mypackage\lib,并把生成的PackageUsage.class文件自动拷贝该lib目录下。
三、使用软件包(import)
在同一个包中的类相互之间的访问可以不受限制,但只有为public类才可以被包外其他的类访问,访问方法有以下两种:
1. 使用包名和类名:格式为“包名.类名”,如想利用java.awt包中Graphics类来创建对象,可以使用语句:java.awt.Graphics graphics=new java.awt.Graphics();也就是说凡是遇到Graphics类的时候都要加上包名java.awt.,否则就会出错。
2. 引入包:使用import语句。格式为:
import 包名.类名; //仅引入指定名称的类
import 包名.*; //引入该包内所有的类或接口,但不包括其子类
需要注意的是import语句放在package语句之后,但要放在类和接口定义之前。此外只能直接使用被引入的类中public修饰的成员和public修饰的方法。
【例4.15】软件包的引入和使用。
1 //PackageTest.java
2 import mypackage.lib.*;
3 public class PackageTest
4 {
5 public static void main(String[] args)
6 {
7 PackageUsage test=new PackageUsage();
8 test.print(test.add(15));
9 }
10 }
该程序编辑完毕后保存到d:\javacode目录下。如果直接编译该程序会出现如图4.8所示的错误提示。
图4.8 编译过程中出现的错误提示
解决的方法有两个,一是在编译时使用“-classpath 目录名”选项,二是在环境变量中设置classpath。
对于【例4.15】,可以使用如下命令即可完成对PackageTest.java的编译:javac –classpath d:\myjava PackageTest.java
如果直接使用java来运行也会出现错误,如图4.9所示。运行的时候也需要加上“-classpath 目录名”选项,此时还必须加上当前目录“.”,如图4.9所示来运行【例4.15】程序:
图4.9 J2SDK安装后的目录结构和文件
另外一种方法就是设置环境变量,添加classpath变量,并把它的值设为“.;d:\myjava”即可直接编译运行源程序。
提示:一个.java文件中只能有一条package语句;对于java.lang包中所有类的使用均可以直接引用,而无须使用包名。