扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
自举类-构成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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者