Java類加載機制初探

Java類加載機制初探

ID:39550881

大小:39.50 KB

頁數(shù):6頁

時間:2019-07-06

Java類加載機制初探_第1頁
Java類加載機制初探_第2頁
Java類加載機制初探_第3頁
Java類加載機制初探_第4頁
Java類加載機制初探_第5頁
資源描述:

《Java類加載機制初探》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、類加載機制初探記得在剛學(xué)JAVA的時候,類的加載機制和初始化順序經(jīng)常被弄的糊里糊涂,其實當(dāng)我們不太了解某些事情的時候,不防去做一做實驗,讓代碼的運行結(jié)果說話,這或許能幫助我們更好地了解一些事情.今天我們就用一些代碼來看一下類是如何被加載的,并且當(dāng)有繼承關(guān)系的時候,類的加載順序又是怎么樣的.先看代碼吧/*?*?Test4.java?*??*?Created?on?2007-9-21,?9:33:31?*??*?To?change?this?template,?choose?Tools?

2、?Templates?*?and?open?the?template?in?the?editor.?*/pa

3、ckage?test1;/**?*?*?@author?hadeslee?*/public?class?Test4?{????private?void?testClassForName(String?name)?throws?ClassNotFoundException{????????Class?c=Class.forName(name);????}????private?void?testNewInstance(String?name)?throws?ClassNotFoundException,?InstantiationException,?IllegalAccessExceptio

4、n{????????Class?c=Class.forName(name);????????Object?obj=c.newInstance();????????System.out.println(obj);????}????public?static?void?main(String[]?args)throws?Exception?{????????Test4?t=new?Test4();????????t.testClassForName("test1.B");????????new?B();????????new?B();????}}class?A{????private?int?a

5、j;????{????????aj=20;????????System.out.println("A成員初始化塊");????}????private?static?int?ai;????static?{????????ai=10;????????System.out.println("A靜態(tài)初始化塊");????}????public?A(){????????System.out.println("A構(gòu)造函數(shù)");????}}class?B?extends?A{????private?static?int?bi;????static?{????????bi=30;????????Syste

6、m.out.println("B靜態(tài)初始化塊");????}????private??int?bj;????{????????bj=40;????????System.out.println("B成員初始化塊");????}????public?B(){????????System.out.println("B構(gòu)造函數(shù)");????}}在代碼里面我們總共有三個類,一個是做測試用的Test4,一個是A,一個是A的子類B,我們在A和B類里面都有很多輸出,一個是靜態(tài)初始化的輸出,一個是成員初始化的輸出,一個是在構(gòu)造函數(shù)里面的輸出,從這些輸出我們可以知道代碼的執(zhí)行順序,以上代碼運行輸出如下:A靜態(tài)初

7、始化塊B靜態(tài)初始化塊A成員初始化塊A構(gòu)造函數(shù)B成員初始化塊B構(gòu)造函數(shù)A成員初始化塊A構(gòu)造函數(shù)B成員初始化塊B構(gòu)造函數(shù)從上面我們可以看出,A和B的靜態(tài)初始化塊只被執(zhí)行了一次,也就是類的對象將要被生成的時候,它會執(zhí)行,并且執(zhí)行的順序如下:父類的靜態(tài)成員,子類的靜態(tài)成員,父類的成員變量和構(gòu)造方法,子類的成員變量和構(gòu)造方法.當(dāng)再用這個類生成對象的時候,靜態(tài)的部份就不再被調(diào)用了.因為靜態(tài)是類的所有實例所共享的,所以它在整個虛擬機的生命周期內(nèi)只執(zhí)行一次.如果我們加上一個t.testClassForName("test1.B");放在main函數(shù)的最后面,我們會發(fā)現(xiàn)輸出還是和剛剛一樣,沒有任何改變,這個時

8、候,我們知道,當(dāng)我們調(diào)用Class.forName(name);的時候,類是不會自動初始化的,它默認只是把這個類的字節(jié)碼讀入內(nèi)存,但是并沒有初始化這個類.只有我們調(diào)用了newInstance()的時候,它才會被初始化.在這里我們再這樣試一下:把A和B生成的class文件去掉,然后再分別調(diào)用Class.forName和newB(),看看會怎么樣,我們會發(fā)現(xiàn)當(dāng)我們調(diào)用Class.forName的時候,當(dāng)我們要fo

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。