跳至内容 Java Solaris 社区 Sun 商店 加入 SDN 我的个人档案 加入的益处
 
关于类库
 
2006 年 1 月[修订号:V2-1]  
本文介绍了如何在 Sun Java Studio Creator 开发环境中使用 Java 类库,以及如何在应用程序中引用这些库。
 
目录
 
类库的概念
在项目中使用库
将库引用添加到项目
在 Java 代码中使用类库
使用修复导入
 
本文使用的代码示例

该示例文件中包含了一个简单的类库 JAR 文件,本文将对其进行描述。阅读本文时无需下载该示例。

 

类库的概念

类库是一种在项目之间共享可重用代码的标准方法。类库中存储着诸如发送电子邮件或连接到数据库之类的常用功能,可供访问该库的开发者重用。

在 Java 编程语言中,类库通常作为 Java 归档 (Java Archive, JAR) 文件分发。JAR 文件可以将类库存储的数据进行压缩,从而减小归档后类文件的大小。

在 Java 技术中,并不存在称为“类库”的程序构造,而是采用,对类文件进行有层次的组织,同时避免发生名称空间的冲突。Java 类文件存储在 JAR 文件中,其目录直接与包名称对应。例如,在 hello.jar 文件中,由于HelloWorld.class 文件是 hello 包的成员,所以它位于 hello 目录中。

代码样例 1:hello.HelloWorld 类
hello\HelloWorld.class
 

是一种程序构造,它将 Java 字节代码按照上下文相关的命名方式进行分组。例如,假设两个不同的软件开发者均为业务对象创建了名为 Customer 的类。在不使用包的情况下,除非先对其中一个类进行重命名,否则 Java 虚拟机 (JVM) 无法同时装入这两个类。然而,如果这两个 Customer 类属于两个不同的包,则可以通过使用其全限定名称装入这两个类。

JVM 可以根据需要,动态装入类。JVM 的环境变量或命令行参数决定了要搜索的归档文件(JAR 和 zip 文件)或文件系统目录。

JVM 在内部总是按类的全限定名称引用类。但是为了方便编程人员,可以在 Java 源文件的开始处按全限定名称导入类,而在源文件的其他地方只需单独引用类名称即可。

注意:必须对类库使用命名唯一的包,才能将该库添加到项目中。不能在根目录下直接添加新类。这样做会导致引用该类的项目出现编译错误。

 

在项目中使用库

要在 Java Studio Creator 项目中使用类库中包含的类,必须添加以下项:

  • 在“项目”窗口的“库”节点下,添加新库引用。

  • 在 Java 源文件中,为要使用的类添加 import 语句。

  • 在 Java 源文件中,添加使用类的代码。

 

将库引用添加到项目

在项目中使用 JAR 文件的类之前,必须将一个库引用添加到引用该 JAR 文件的项目。这样做会将 JAR 文件添加到项目的类路径中,以便可以装入它包含的类。在将 Web 应用程序部署到服务器时,会将 JAR 文件添加到该应用程序的类路径中。

要添加库引用,请在“项目”窗口中打开 "<项目名称>" 节点,右键单击“库”节点,然后选择“添加库”。有关将类库引用添加到项目中的具体方法,请参见教程引用类库

 

在 Java 代码中使用类库

在项目中设置了类库的引用后,IDE 可以使用该库所包含的任何类。您必须使用一个全限定名称或 import 语句才可以在代码中使用类,如下所述。

 
全限定名称

使用全限定类名是一种显式访问库中类的方法。例如,可以在支持 Bean 中按以下方式声明私有实例变量:

代码样例 2:使用全限定类名
public class Page1 extends AbstractPageBean {
    // ...
    private hello.HelloWorld hello = new hello.HelloWorld();
    // ...
}
 

此存取方法指定了声明 HelloWorld 类的包,即 hello 包。如果还要在应用程序中引用另一个包中的 HelloWorld 类,则使用全限定名称可确保清楚地区分使用了哪一个类。如果出现混淆,类名冲突将导致编译错误。

 
single-type-import 声明

在源代码文件的开始处,通过使用 single-type-import 声明可以将类逐个导入代码中,这样每次引用类时,可以使用简单的类名而不是全限定名称。

代码样例 3:使用 single-type-import 声明
// ...
import hello.HelloWorld; // a single-type-import declaration
public class Page1 extends AbstractPageBean {
    // ...
    private HelloWorld hello = new HelloWorld();
    // ...
}
 
type-import-on-demand 声明

如果代码使用包中的多个类,则可以使用 type-import-on-demand 声明。通过使用此声明,您可以按简单类名来引用作为包成员的任何类,而无需分别导入每个类。您需要在 Java 类顶部声明 import 语句,并使用通配符 (*) 而不是某个类名,这样应用程序便可以访问包中的所有类:

代码样例 4:使用 type-import-on-demand 声明
/// ...
import hello.*; // a type-import-on-demand declaration

public class Page1 extends AbstractPageBean {
    // ...
    private HelloWorld hello = new HelloWorld();
    // ...
}
 

注意:type-import-on-demand 声明不是递归的。它们仅装入声明时指定包中的类,并不包含任何子包中的类。

确定要使用的 import 声明

有多种方法可以将包和类导入到应用程序中,您可能想了解具体应该使用哪种方法。全限定名称是最准确的一种方法,可以最大限度地保证类名清晰、明确。使用 single-type-import 声明和 type-import-on-demand 声明,您只需编写很少的代码就可以访问导入的类。与 type-import-on-demand 声明相比,single-type-import 声明的一个优点是所有导入的类将清晰地列在 Java 源文件的顶部。

注意:编译器会假定隐式 import java.lang.* 声明位于每个源代码文件的开始处。

 

使用修复导入

即使像 Java StringTokenizer 类这样的标准类,也需要在源代码文件中为其提供 import 语句。Java Studio Creator IDE 能够帮助您确定应导入哪些包或类。例如,您可以输入以下代码,而无需提供对应的 import 语句:

代码样例 5:缺少 Import 语句的源代码
public class Page1 extends AbstractPageBean {
    // ...
    private StringTokenizer st = new StringTokenizer("abc 123");
    // ...
}
 

由于没有 import 语句并且没有不存在类的全限定名称,您会看到在该行上出现编译错误,它是使用编辑器旁注处的红框以及语句下面的红色曲线来标注的。如果在 Java 文件中的任意位置单击鼠标右键,然后选择“修复导入”(Alt-Shift-F),则 IDE 会在源代码文件的开始处添加 single-type-import 声明。

如果系统无法在应用程序的引用 JAR 文件中找到类,则会显示一条错误消息。例如,如果将上述代码样例中的类错误地拼写为 StringTokenizerr,则显示以下信息对话框:

图 1:修复导入信息对话框
图 1:修复导入信息对话框
 
将引用的库复制到部署的项目

将 JAR 文件引用添加到应用程序后,IDE 在您部署该应用程序时会自动将引用的库和您的应用程序捆绑在一起。这种复制引用库的方法使开发者的工作在某些方面得到了简化,但在另外一些方面又变得更加困难了。这种方法的优点是:如果要尝试使用库的新版本,则无需担心服务器上安装的应用程序受到影响。

这同样也是一个缺点,如果要将库升级到新版本,则必须找出引用该库的所有应用程序,并重新部署每个应用程序以便这些应用程序可以使用新版本。

 

小结

类库为开发者之间共享和重用现有代码发挥了关键作用。JAR 文件是 Java 技术中用来存储和传输类库的标准方法。可以使用多种方法将包和类导入应用程序中:

  • 全限定名称

  • Single-type-import 声明

  • Type-import-on-demand 声明

Java Studio Creator 开发环境在您部署应用程序时会自动复制引用的库。

 

更多的开发者资源

有关为开发者提供的更多技术提示、文章和专家建议,请访问 Sun Developer Network (SDN) 上的 Java Studio Creator 开发者资源,网址为:http://gceclub.sun.com.cn/prodtech/javatools/jscreator/

相关信息