Jjava
Java的類加載器通常爲URLClassLoader,在Android裏是不能用的,取而代之的是DexClassLoader和PathClassLoader。android
Android 中的類加載器大體能夠分紅兩類,一類是系統提供的,另一類則是由 Java 應用開發人員編寫的。app
系統提供的類加載器主要有下面三個:this
1,引導類加載器(java.lang.BootClassLoader instance):它用來加載 Java 的核心庫,是由虛擬機提供的,並不繼承自 java.lang.ClassLoader。spa
2,系統類加載器(dalvik.system.PathClassLoader instance):它用來加載 Java 的擴展庫。Java 虛擬機的實現會提供一個擴展庫目錄。該類加載器在此目錄裏面查找並加載 Java 類. debug
在 android中,它的DexPathList 默認是 ".", 即啓動 dalvik vm的目錄, code
nativeLibraryDirectories 是 [/vendor/lib , /system/lib]; 能夠經過 ClassLoader.getSystemClassLoader()來獲取它。繼承
3,應用類加載器(dalvik.system.PathClassLoader instance):它根據 Java 應用的類路徑(CLASSPATH)來加載 Java 類。通常來講,Java 應用的類都是由它來完成加載的。它的 DexPathList 是 "/data/app/your_package_file_name.apk", ip
nativeLibraryDirectories 則爲 [/data/app-lib/your_package_file_name, /vendor/lib, /system/lib]」開發
若是在一個 Activity 中執行以下代碼:
this.getClassLoader() //或者 任何一個普通 POJO 好比 param ,執行: //param.getClass().getClassLoader()
都會獲得相似以下的結果:
result = {dalvik.system.PathClassLoader@5453543} "dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.zzw.october.debug-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.zzw.october.debug-1, /vendor/lib, /system/lib]]]" pathList = {dalvik.system.DexPathList@4324325} "DexPathList[[zip file "/data/app/com.zzw.october.debug-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.zzw.october.debug-1, /vendor/lib, /system/lib]]」 parent= {java.lang.BootClassLoader@6745984}
Java 應用開發人員編寫和使用的則主要是 DexClassLoader 以及其餘繼承至ClassLoader的類。