首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

JAVA基础:Java 启动器怎么查找类

2012-01-07 
JAVA基础:Java 启动器如何查找类自举类-构成Java平台的类,包括rt.jar和i18n.jar中的类。扩展类-使用Java扩

JAVA基础: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   系统属性中。


Javac   和   JavaDoc   如何查找类


javac   和   javadoc   工具使用两种不同方式使用类文件。

象其它   Java   应用程序一样,javac   和   javadoc   必须加载多种类文件才能运行。  
要处理它们操作的源代码,javac   和   javadoc   必须获得源代码中所用对象类型的信息。  
用来解析源代码引用的类文件大部分和用来运行   javac   和   javadoc   的类文件相同,但有重要的一些例外:  

javac   和   javadoc   经常解析对与   javac   或   javadoc   的实现无关的类和接口的引用。有关被引用的用户类和接口的信息可能以类文件、源代码文件或二者结合起来的形式存在。  
tools.jar   中的工具类仅用来运行   javac   和   javadoc。工具类不用来解析源代码引用,除非   tool.jar   在用户类路径中。  
程序员可能要用另一种   Java   平台实现解析自举类或扩展类引用。利用   -bootclasspath   和   -extdirs   选项,javac   和   javadoc   都可以支持这种操作。使用这些选项不会修改用来运行   javac   或   javadoc   工具本身的类文件集。  
如果在类文件和源文件中定义了被引用的类,则   javadoc   通常使用源文件(javadoc   不编译源文件)。同样情况下,javac   使用类文件,但会自动重新编译它认为过期的类文件。自动重新编译的规则将在   javac   文档(Windows   或   Solaris)中介绍。

缺省情况下,javac   和   javadoc   在用户类路径中搜索类文件和源代码文件。如果指定了   -sourcepath   选项,则   javac   和   javadoc   仅搜索指定的源文件路径。


类加载和安全策略
类或接口必须用类加载器加载后才能使用。对特定类加载器的使用确定了与类加载器关联的安全策略。

程序可通过调用类加载器对象的   loadClass   方法加载类或接口,但通常程序仅通过引用方式进行加载。这样就将调用内部类加载器,它对扩展类和用户类应用安全策略。如果未启用安全策略,则所有类都是“可信任的”。即使启用了安全策略,也不适用于自举类。它永远是“可信任的”。

启用后,系统和用户策略文件将对安全策略进行配置。JDK   软件包括一个系统策略文件,它对扩展类授予“可信任”状态,并对用户类设置基本限制。

要启用或配置安全策略,参见安全功能。

注意:一些   Java   1.1   平台使用的安全编程技术与   1.2   类加载模型不兼容。为了对已有代码提供临时支持,这一版本包括   oldjava   启动器,它使用   1.1   类加载模型。

http://java.ccidnet.com/art/297/20061227/987681_1.html

[解决办法]
挺好
[解决办法]
学习
[解决办法]
lz辛苦了
感谢ing
[解决办法]
发现张孝祥的《JavaWeb开发内幕--核心基础》的160页对这个问题讲解得很清楚。:)
[解决办法]
MARK
[解决办法]
张孝祥-.- 记得一开始学JAVA的时候看的就是他的视频
[解决办法]
up
[解决办法]
感谢分享.

热点排行