正 文

Java类加载内幕


www.7dspace.com  更新日期:2005-10-20 2:59:01  七度空间


  图3显示了控制台输出。我们可以看到对应着Version.fx(1)的代码被执行了,因为类加载器在classpath首先看到此版本的代码。

  图3. 在类路径中samepath测试排在最前面的version 1

  再次运行,类路径做如下微小改动。

  set CLASSPATH=.;%CURRENT_ROOT%\v2;%CURRENT_ROOT%\v1

  %JAVA_HOME%\bin\java Test

  控制台的输出变为图4。对应着Version.fx(2)的代码被加载,因为类加载器在classpath中首先找到它的路径。

  图4. 在类路径中samepath测试排在最前面的version 2

  根据以上例子可以很明显地看出,类加载器加载在类路径中被首先找到的元素。如果我们在v1和v2中删除了version.Version,做一个非version.Version形式的.jar文件,如myextension.jar,把它放到对应java.ext.dirs的路径下,再次执行后看到version.Version不再被AppClassLoader加载,而是被扩展类加载器加载。如图5所示。

  图5. AppClassLoader及ExtClassLoader

  继续这个例子,文件夹differentversions包含了一个RMI执行引擎,客户端可以提供给执行引擎任何实现了 common.TaskIntf接口的任务。子文件夹client1 和 client2包含了类client.TaskImpl有个细微不同的两个版本。两个类的区别在以下几行:

    static{
        log("client.TaskImpl.class.getClassLoader
        (v1) : " + TaskImpl.class.getClassLoader());
    }

    public void execute(){
        log("this = " + this + "; execute(1)");
    }

11页,页码:[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] 

上一篇:EJB的核心技术应用总结
下一篇:网络服务器之ISA Server概述
作者:  来源:Matrix ( 责任编辑:7dspace )
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐