本篇文章給大家分享的是有關(guān)怎么在Android中利用ClassLoader對(duì)類進(jìn)行加載,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
Java的類加載設(shè)計(jì)了一套雙親代理的模式,使得用戶沒法替換系統(tǒng)的核心類,從而讓應(yīng)用更安全。所謂雙親代理就是指,當(dāng)加載類的時(shí)候首先去Bootstrap中加載類,如果沒有則去Extension中加載,如果再?zèng)]有才去AppClassLoader中去加載。從而實(shí)現(xiàn)安全和穩(wěn)定。
Java ClassLoader
BootstrapClassLoader
引導(dǎo)類加載器 ,用來加載Java的核心庫。通過底層代碼來實(shí)現(xiàn)的,基本上只要parent為null,那就表示引導(dǎo)類加載器。
比如:charsets.jar、deploy.jar、javaws.jar、jce.jar、jfr.jar、jfxswt.jar、jsse.jar、management-agent.jar、plugin.jar、resources.jar、rt.jar
ExtClassLoader
拓展類加載器 ,用來加載Java的拓展的類庫, ${JAVA_HOME}/jre/lib/ext/ 目錄中的所有jar。
比如:cldrdata.jar、dnsns.jar、jfxrt.jar、localedata.jar、nashorn.jar、sunec.jar、sunjce_provider.jar、sunpkcs11.jar、zipfs.jar等等
AppClassLoader
系統(tǒng)類加載器 (不要被名字給迷惑),用來加載Java應(yīng)用中的類。一般來說自己寫的類都是通過這個(gè)加載的。而Java中 ClassLoader.getSystemClassLoader() 返回的就是AppClassLoader。(Android中修改了ClassLoader的邏輯,返回的會(huì)是一個(gè)PathClassLoader)
自定義ClassLoader
用戶如果想自定義ClassLoader的話,只需要繼承自 java.lang.ClassLoader 即可。
ClassLoader中與加載類相關(guān)的方法:
也許你不太了解上面幾個(gè)函數(shù)的區(qū)別,沒關(guān)系,我們來看下源碼是如何實(shí)現(xiàn)的。
//ClassLoader.java protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException { // First, check if the class has already been loaded Class c = findLoadedClass(name); if (c == null) { long t0 = System.nanoTime(); try { if (parent != null) { c = parent.loadClass(name, false); } else { c = findBootstrapClassOrNull(name); } } catch (ClassNotFoundException e) { // ClassNotFoundException thrown if class not found // from the non-null parent class loader } if (c == null) { // If still not found, then invoke findClass in order // to find the class. long t1 = System.nanoTime(); c = findClass(name); // this is the defining class loader; record the stats } } return c; }
本文標(biāo)題:怎么在Android中利用ClassLoader對(duì)類進(jìn)行加載-創(chuàng)新互聯(lián)
網(wǎng)頁URL:http://jinyejixie.com/article16/djcsgg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、域名注冊(cè)、網(wǎng)站設(shè)計(jì)公司、面包屑導(dǎo)航、企業(yè)網(wǎng)站制作、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容