欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

classloader原理

謝彥文2年前14瀏覽0評論

classloader原理?

1. classLoader是什么?

ClassLoader是類的加載器,用于加載class對象到JVM中的,分為2種,啟動類加載器和實際類加載器.

2. ClassLoader的作用

.java文件通過JAVAc.exe編譯成.Class文件,然后通過classLoader加載到JVM內(nèi)存中. 加載到JVM內(nèi)存的就是Class對象,存儲著.class字節(jié)碼內(nèi)容,每一個class對象都有g(shù)etClassLoader()方法, 得到是誰把我從.class文件加載到內(nèi)存中變成Class對象的。

3. ClassLoader層次結(jié)構(gòu)

1).根類加載器(null) ..由本地代碼(c/c++)實現(xiàn),加載(%JAVA_HOME%\jre\lib)

2).擴(kuò)展內(nèi)加載器(ExtClassLoader) .. 主要加載擴(kuò)展目錄下的jar包, %JAVA_HOME%\lib\ext

3). 應(yīng)用類加載器(AppClassLoader) ...主要加載我們應(yīng)用程序中的類

4. Class加載時調(diào)用類加載器的順序

應(yīng)用類加載器 ----委托加載---》 擴(kuò)展類加載器--委托加載---》 根類加載器

當(dāng)一個類要被加載時,有一個啟動類加載器和實際類加載器的概念,這個概念請看如下分析

如上面的Test.class要進(jìn)行加載時,它將會啟動應(yīng)用類加載器進(jìn)行加載Test類,但是這個應(yīng)用類加載器不會真正去加載他,而是會調(diào)用看是否有父加載器,結(jié)果有,是擴(kuò)展類加載器,擴(kuò)展類加載器也不會直接去加載,它看自己是否有父加載器沒,結(jié)果它還是有的,是根類加載器。

所以這個時候根類加載器就去加載這個類,可在%JAVA_HOME%\jre\lib下,它找不到com.Test這個類,所以他告訴他的子類加載器,我找不到,你去加載吧,子類擴(kuò)展類加載器去%JAVA_HOME%\lib\ext去找,也找不著,它告訴它的子類加載器 AppClassLoader,我找不到這個類,你去加載吧,結(jié)果AppClassLoader找到了,就加到內(nèi)存中,并生成Class對象。

這個時間時候啟動類加載器(應(yīng)用類加載器)和實際類加載器(應(yīng)用類加載器)是同一個。

ClassLoader利用其特性可以防止java核心類被覆蓋。編寫java.lang.Long類,定義一個main方法,執(zhí)行該main方法時,會出現(xiàn)找不到main方法的提示。

沒有main方法是因為執(zhí)行的根本不是我們自己寫的類,執(zhí)行的是java核心中的那個Long類,當(dāng)然沒有main方法了。 這樣就防止我們應(yīng)用中寫的類覆蓋掉java核心類。

特性:

類加載器基于三個機(jī)制:委托、可見性和單一性,

委托機(jī)制是指將加載一個類的請求交給父類加載器,如果這個父類加載器不能夠找到或者加載這個類,那么再加載它。

可見性的原理是子類的加載器可以看見所有的父類加載器加載的類,而父類加載器看不到子類加載器加載的類。

單一性原理是指僅加載一個類一次,這是由委托機(jī)制確保子類加載器不會再次加載父類加載器加載過的類。

參考:

1.Java類加載器(http://www.cnblogs.com/wang-meng/p/5574071.html )

2.ClassLoader 詳解及用途[http://blog.chinaunix.net/uid-21227800-id-65885.html]

java中ext,classloader原理