这些Java教程是针对JDK 8编写的。本页面描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
有关Java SE 9及后续版本中更新的语言特性的摘要,请参阅Java语言更改。
有关所有JDK版本的新功能、增强功能以及已删除或弃用选项的信息,请参阅JDK发行说明。
已安装的扩展是Java Runtime Environment(JRE™)软件中lib/ext目录中的JAR文件。顾名思义,JRE是Java开发工具包的运行时部分,其中包含平台的核心API,但不包括编译器和调试器等开发工具。JRE可以作为独立的组件提供,也可以作为Java开发工具包的一部分提供。
JRE是JDK软件的严格子集。JDK软件目录树的子集如下所示:
JRE由图中突出显示的框内的那些目录组成。无论您的JRE是独立的还是作为JDK软件的一部分,JRE目录中lib/ext中的任何JAR文件都会被运行时环境自动视为扩展。
由于已安装的扩展扩展了平台的核心API,请谨慎使用它们。它们很少适用于仅由单个或一小组应用程序使用的接口。
此外,由于已安装扩展定义的符号将在所有Java进程中可见,因此应注意确保所有可见的符号遵循适当的“反向域名”和“类层次结构”约定。例如,com.mycompany.MyClass。
从Java 6开始,扩展JAR文件还可以放置在与任何特定JRE无关的位置,以便扩展可以由安装在系统上的所有JRE共享。在Java 6之前,java.ext.dirs的值指的是单个目录,但是从Java 6开始,它是一个目录列表(类似于CLASSPATH),指定了扩展的搜索位置。路径的第一个元素始终是JRE的lib/ext目录。第二个元素是JRE之外的目录。这个其他位置允许扩展JAR文件只安装一次,并由安装在该系统上的多个JRE使用。位置因操作系统而异:
请注意,放置在上述任何一个目录中的已安装扩展都将扩展系统上每个JRE(Java 6或更高版本)的平台。
让我们创建一个简单的已安装扩展。我们的扩展包含一个名为RectangleArea的类,用于计算矩形的面积:
public final class RectangleArea { public static int area(java.awt.Rectangle r) { return r.width * r.height; } }
这个类有一个名为area的方法,它接受一个java.awt.Rectangle的实例,并返回矩形的面积。
假设您想使用一个名为AreaApp
的应用程序来测试RectangleArea:
import java.awt.*; public class AreaApp { public static void main(String[] args) { int width = 10; int height = 5; Rectangle r = new Rectangle(width, height); System.out.println("矩形的面积是 " + RectangleArea.area(r)); } }
这个应用程序实例化一个10乘5的矩形,然后使用RectangleArea.area方法打印出矩形的面积。
首先让我们回顾一下如何在不使用扩展机制的情况下运行AreaApp
应用程序。我们假设RectangleArea类打包在名为area.jar的JAR文件中。
当然,RectangleArea类不是Java平台的一部分,所以你需要将area.jar文件放在类路径上,以便在运行AreaApp
时不会出现运行时异常。例如,如果area.jar在目录/home/user中,你可以使用以下命令:
java -classpath .:/home/user/area.jar AreaApp
此命令中指定的类路径包含当前目录,包含AreaApp.class,以及包含RectangleArea包的JAR文件的路径。通过运行此命令,你将获得期望的输出:
矩形的面积是50
现在让我们看看如何通过使用RectangleArea类作为扩展来运行AreaApp
。
要将RectangleArea类作为扩展,将文件area.jar放置在JRE的lib/ext目录中。这样做会自动将RectangleArea的状态设置为已安装扩展。
使用area.jar作为已安装扩展,你可以在不需要指定类路径的情况下运行AreaApp
:
java AreaApp
因为你正在使用area.jar作为已安装扩展,运行时环境将能够找到并加载RectangleArea
类,即使你没有在类路径上指定它。类似地,任何在你的系统上运行的用户的小程序或应用程序都可以找到并使用RectangleArea类。
如果在系统上安装了多个JRE(Java 6或更高版本)并且希望RectangleArea类在所有JRE中都可用作扩展,而不是将其安装在特定JRE的lib/ext目录中,请将其安装在系统范围的位置。例如,在运行Linux的系统上,在目录/usr/java/packages/lib/ext中安装area.jar。然后,AreaApp
可以使用安装在该系统上的不同JRE运行,例如,如果不同的浏览器配置为使用不同的JRE。