科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件Java启动器如何查找类(1)

Java启动器如何查找类(1)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文先介绍自举类、扩展类和用户类,然后说明Java启动器如何查找自举类、Java启动器如何查找扩展类、Java启动器如何查找用户类、Java启动器如何查找JAR-CLASS-PATH类、OldJava启动器如何查找类、Javac和JavaDoc如何查找类、类加载和安全策略。

作者:http://www.51cto.com 来源:赛迪网社区 2007年9月2日

关键字: java 启动器

  • 评论
  • 分享微博
  • 分享邮件
 

自举类-构成Java平台的类,包括rt.jar和i18n.jar中的类。

扩展类-使用Java扩展机制的类。它们被捆绑为.jar文件,位于扩展目录中。

用户类-开发人员和第三方定义的类,不使用扩展机制。在命令行上使用-classpath选项(常用方法)或使用CLASSPATH环境变量可识别这些类的位置(参见设置Windows或Solaris的Classpath)。

实际上,这三个搜索路径将被连为一个简单的类路径。这有点象以前使用的“单级”类路径,但现在的模型有一些重要差别:

偶然“隐藏”或省略自举类相对困难一些。

通常只需指定用户类的位置。系统将“自动”查找自举类和扩展类。

工具类现在位于独立的归档中(tools.jar)。只有当它包含在用户类路径中时才可用(稍后会有解释)。

Java启动器如何查找自举类

自举类是实现Java 1.2平台的类。自举类在/jdk1.2/jre/lib中的rt.jar和i18n.jar归档中。这些归档由存储在sun.boot.class.path系统属性中的自举类路径值指定。该系统属性仅供引用,不应直接修改。

需要重新定义自举类路径的可能性较小。极少数情况下需要使用另一组核心类时,非标准选项-Xbootclasspath允许重新定义自举类路径。

注意:实现JDK开发工具的类与自举类在不同归档中。工具归档为/jdk1.2/lib/tools.jar。调用启动器时,开发工具将该归档添加到用户类路径中。然而,这个扩大的用户类路径仅用于执行工具。处理源代码的工具javac和javadoc将使用初始类路径,而不是扩大后的类路径(有关详细信息,参见下面的Javac和Javadoc如何查找类)。

Java启动器如何查找扩展类

扩展类是扩展Java平台的类。扩展目录中的每个.jar文件即被认为是扩展,且都使用Java扩展框架加载。我们不提供改变扩展目录位置的选项。

Java启动器如何查找用户类

用户类是在Java平台上构建的类。查找用户类时,启动器需要使用用户类路径,它是一张目录、JAR归档和包含类文件的ZIP归档的列表。

类文件有一个反映类全限定名的子路径名。例如,如果类com.mypackage.MyClass存储在/myclasses下,则/myclasses一定位于用户类路径中,且类文件的完全路径一定为/myclasses/com/mypackage/MyClass.class。如果类存储在名为myclasses.jar的归档中,则myclasses.jar一定位于用户类路径中,且类文件一定作为com/mypackage/MyClass.class存储在归档中。

在Solaris中,我们用字符串指定用户类路径,而用冒号(:)分隔类路径项。java启动器将用户类路径字符串放置在java.class.path系统属性中。该值可能的源为:

缺省值“.”意味着用户类文件是当前目录中的所有类文件(如果是在包中,则为当前目录下的)。

CLASSPATH环境变量的值,它覆盖缺省值。

命令行选项-cp或-classpath的值,它覆盖缺省值和CLASSPATH值。

-jar选项指定的JAR归档,它覆盖所有其它值。如果使用该选项,则所有用户类都来自指定的归档。

Java启动器如何查找JAR-CLASS-PATH类

JAR文件通常包含一个“清单”-该文件列出JAR的内容。清单可以定义JAR-CLASS-PATH,而后者进一步扩展类路径(仅当从该JAR中加载类时)。查找JAR-CLASS-PATH访问的类时将按以下顺序进行:

通常,查找JAR-CLASS-PATH项引用的类时,即将其当作JAR文件的一部分。出现在JAR-class-path中的JAR文件将在JAR-CLASS-PATH前面的类路径项之后及JAR-CLASS-PATH后面的类路径项之前进行搜索。

然而,如果JAR-CLASS-PATH指向一个已搜索过的JAR文件(例如扩展或在类路径前面列出的JAR文件),则不再搜索该JAR文件(这种优化方式提高了效率,防止了循环搜索)。这样的JAR文件将在它出现的地方(类路径中更靠前的地方)进行搜索。

如果JAR文件作为扩展安装在jdk的ext子目录中,则忽略它所定义的JAR-CLASS-PATH。我们假定扩展所需的所有类都是JDK的一部分或已作为扩展安装。

OldJava启动器如何查找类

oldjava启动器不支持Java扩展框架。下列情况下,它提供向后兼容性:

有一个实现1.1风格的安全管理器(与1.2类加载方法不兼容)的应用程序,或者正在加载的类已生成,或以与1.2类结构不兼容的方式(例如用模糊器)管理。

(有关这些问题的详细信息,参见Windows或Solaris的java启动器参考页。)

oldjava启动器在一个类路径中组合了自举类和用户类。用oldjava指定类路径的方法有两种:

在CLASSPATH环境变量中指定用户类路径。用户类路径加在预定义的自举类路径后。

用命令行选项-cp或-classpath指定完整的类路径。忽略CLASSPATH的值和预定义的自举类路径。

组合类路径存储在java.class.path系统属性中。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章