Java裝載器也是Java的四大核心技術(shù)之一。這篇文章中,北京北大青鳥學(xué)校學(xué)術(shù)部老師要為各位講解一下裝載器的體系結(jié)構(gòu)。
北京北大青鳥學(xué)校技術(shù)專家介紹:一個(gè)Java應(yīng)用程序可以使用兩種類裝載器:“啟動(dòng)(bootstrap)"類裝載器”和“用戶定義的類裝載器”。啟動(dòng)類裝載器(這是系統(tǒng)中唯一的)是Java虛擬機(jī)實(shí)現(xiàn)的一部分。啟動(dòng)類裝載器通常使用某種默認(rèn)方式從本地磁盤中裝載類,包括Java API類(啟動(dòng)類裝載器也被稱為原始類裝載器、系統(tǒng)類裝載器或者默認(rèn)類裝載器)。
Java應(yīng)用程序能夠在運(yùn)行時(shí)安裝用戶定義的類裝載器,這種類裝載器能夠使用自定義的方式來(lái)裝載類。例如,從網(wǎng)絡(luò)下載class文件。盡管啟動(dòng)類裝載器是虛擬機(jī)實(shí)現(xiàn)的本質(zhì)部分,而用戶定義的類裝載器不是,但用戶定義的類裝載器能夠用Java來(lái)編寫,能夠被編譯成class文件,能夠被虛擬機(jī)裝載,還能夠像其它對(duì)象一樣實(shí)例化。
由于有用戶定義類裝載器,所以不必再編譯的時(shí)候就知道運(yùn)行中的Java應(yīng)用程序中最終會(huì)加入的所有的類。用戶定義的類裝載器使得在運(yùn)行擴(kuò)展Java應(yīng)用程序成為可能。當(dāng)它運(yùn)行時(shí),應(yīng)用程序能夠解決它需要哪些額外的類,能夠決定是使用一個(gè)或是更多的用戶定義的類裝載器來(lái)裝載。由于類裝載器是用Java編寫的,所以用任何在Java代碼中可以表述的風(fēng)格來(lái)進(jìn)行類裝載。這些類可以通過(guò)網(wǎng)絡(luò)下載,可以從某些數(shù)據(jù)庫(kù)中獲取,甚至可以動(dòng)態(tài)生成。
每一個(gè)類被裝載的時(shí)候,Java虛擬機(jī)都監(jiān)視這個(gè)類,看到它到底是被啟動(dòng)類裝載器還是被用戶定義類裝載器裝載。當(dāng)被裝載的類引用了另外一個(gè)類時(shí),虛擬機(jī)就會(huì)使用裝載第一個(gè)類的類裝載器裝載引用的類。例如,如果虛擬機(jī)使用一個(gè)特定的類裝載器裝載Volcano這個(gè)類,它就會(huì)使用這個(gè)類裝載器裝載Volcano類使用的所有類。(北京北大青鳥學(xué)校學(xué)術(shù)部提供,未完待續(xù))