系统类加载器的资源查找算法

ale*_*2k8 3 java android

在Java 文档中,我看到了这样的陈述:

系统类加载器的资源查找算法用于查找资源.

但是我在哪里可以了解这种"查找算法"实际上是如何工作的,尤其是在Android环境中.

fas*_*seg 6

你有一个java类加载器的层次结构,例如:

    Bootstrap CL
        |
        |
    Extension CL
        |
        |
SystemClassLoader CL
        |
        |    
Application Specific CL
Run Code Online (Sandbox Code Playgroud)

在调用CL的findClass()方法时,ClassLoader通常会先委托给它的父级,然后尝试加载Class.

例如,如果您正在尝试加载可以使用的JVM 的ext文件夹中的类

Class clazz=ClassLoader.getSystemClassLoader().findClass("org.pack.ExtClass");
Run Code Online (Sandbox Code Playgroud)

这将首先委托给它的父类Extension ClassLoader,它将委托给它的父代Bootstrap CL.Bootstrap CL将返回null到Extension ClassLoader,因为它找不到类,然后Extension CL将自己查找Class.因为它会在类路径中找到类"org.pack.ExtClass",它将加载,准备并将类返回给SystemClassLoader,后者将设置clazz对返回的类对象的引用.

因此,作为一般规则,ClassLoader将始终首先委托给它的父级,并尝试自己查找该类.

但是这个规则有例外,最突出的是Tomcat等人的WebApp类加载器.WebAppClassLoader的行为略有不同.我认为在Tomcat目录中有一个带有CL的bootstrap.jar,它将首先加载类,如果找不到请求的类,则只委托给它的父类.

一些链接:

http://www.developer.com/java/other/article.php/2248831/Java-Class-Loading-The-Basics.htm

http://tomcat.apache.org/tomcat-5.5-doc/class-loader-howto.html

http://www.ibm.com/developerworks/java/library/j-dyn0429/

希望有帮助..