2011-03-17 74 views
3

在Java docs我看到這樣的語句:系統類加載器的資源查找算法

系統類加載器的資源 查找算法來找到 資源。

但是我在哪裏可以瞭解這種「查找算法」實際上是如何工作的,特別是在Android環境中。

回答

2

在Android(Dalvik)系統類加載器中是PathClassLoader

你將不得不看看它的源代碼來找出算法。這可能是遍歷可用Jar文件和目錄的某種形式的樹遍歷。

6

你在Java類加載器的層次結構,例如:

Bootstrap CL 
     | 
     | 
    Extension CL 
     | 
     | 
SystemClassLoader CL 
     | 
     |  
Application Specific CL 

當調用一個CL的的findClass()方法一個ClassLoader通常委託給它的父首先將嘗試加載類。

E.g.如果你想加載類,這是在EXT-文件夾JVM的你可以使用

Class clazz=ClassLoader.getSystemClassLoader().findClass("org.pack.ExtClass"); 

首先會委託給它的父,擴展類加載器,這將委託給它的父, Bootstrap CL。 Bootstrap CL將返回null給擴展類加載器,因爲它找不到該類,那麼擴展CL將自己尋找類。由於它會在類路徑中找到類「org.pack.ExtClass」,它將加載,準備並將類返回給SystemClassLoader,SystemClassLoader會將參考clazz設置爲返回的類對象。

因此,作爲一般規則,ClassLoader將總是首先委託給它的父代,並嘗試自行尋找它的類。

但是這個規則有例外,最突出的是Tomcat等人的WebApp Classloaders。 WebAppClassLoader的行爲有點不同。我認爲Tomcat Directory中有一個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/

希望幫助..