這其實(shí)是去年校招時(shí)我遇到的一道阿里巴巴的筆試題(承認(rèn)有點(diǎn)久遠(yuǎn)了-。-),嗯,如果我沒記錯(cuò)的話,當(dāng)時(shí)是作為Java方向的一道選做大題。當(dāng)然題意沒有這么直白,題目只要求你寫出程序運(yùn)行后所有System.out.PRintln的輸出結(jié)果,其中程序是題目給的,而各個(gè)System.out.println的執(zhí)行順序不同會(huì)導(dǎo)致最后程序輸出的結(jié)果也不同。
具體的題目我肯定記不清,不過我們可以換個(gè)直接的問法,如果類A和類B中有靜態(tài)變量,靜態(tài)語(yǔ)句塊,非靜態(tài)變量,非靜態(tài)語(yǔ)句塊,構(gòu)造函數(shù),靜態(tài)方法,非靜態(tài)方法,同時(shí)類A繼承類B,請(qǐng)問當(dāng)實(shí)例化A時(shí),類內(nèi)部的加載順序是什么?
當(dāng)時(shí)我也是一頭霧水,事后我就自己寫了一個(gè)小Demo,這才知道了類內(nèi)部的實(shí)際加載順,測(cè)試代碼如下:
Class B:
public class B{//靜態(tài)變量static int i=1;//靜態(tài)語(yǔ)句塊static {System.out.println("Class B1:static blocks"+i);}//非靜態(tài)變量int j=1;//靜態(tài)語(yǔ)句塊static{i++;System.out.println("Class B2:static blocks"+i);}//構(gòu)造函數(shù)public B(){i++;j++;System.out.println("constructor B: "+"i="+i+",j="+j);}//非靜態(tài)語(yǔ)句塊{ i++; j++; System.out.println("Class B:common blocks"+"i="+i+",j="+j);}//非靜態(tài)方法public void bDisplay(){i++;System.out.println("Class B:static void bDisplay():"+"i="+i+",j="+j);return ;}//靜態(tài)方法public static void bTest(){i++;System.out.println("Class B:static void bTest():"+"i="+i);return ;}}
Class A:
public class A extends B{//靜態(tài)變量static int i=1;//靜態(tài)語(yǔ)句塊static {System.out.println("Class A1:static blocks"+i);}//非靜態(tài)變量int j=1;//靜態(tài)語(yǔ)句塊static{i++;System.out.println("Class A2:static blocks"+i);}//構(gòu)造函數(shù)public A(){ super();i++;j++;System.out.println("constructor A: "+"i="+i+",j="+j);}//非靜態(tài)語(yǔ)句塊{ i++; j++; System.out.println("Class A:common blocks"+"i="+i+",j="+j);}//非靜態(tài)方法public void aDisplay(){i++;System.out.println("Class A:static void aDisplay():"+"i="+i+",j="+j);return ;}//靜態(tài)方法public static void aTest(){i++;System.out.println("Class A:static void aTest():"+"i="+i);return ;}}
Class ClassLoading :
public class ClassLoading {public static void main (String args[]) {A a=new A();a.aDisplay();}}
程序運(yùn)行結(jié)果如圖:
通過上述示圖,我們可以比較清晰的看出java類的整個(gè)加載過程。
OK,今天就總結(jié)到這里了,如果有地方說的不好或有錯(cuò)誤的地方,歡迎大家指出,定當(dāng)改正,謝謝。
查看原文:http://www.xyczero.com/blog/article/6/.
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注