麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發(fā)設計 > 正文

Java 中類的加載順序

2019-11-14 21:15:26
字體:
來源:轉載
供稿:網(wǎng)友
java 中類的加載順序

這其實是去年校招時我遇到的一道阿里巴巴的筆試題(承認有點久遠了-。-),嗯,如果我沒記錯的話,當時是作為Java方向的一道選做大題。當然題意沒有這么直白,題目只要求你寫出程序運行后所有System.out.PRintln的輸出結果,其中程序是題目給的,而各個System.out.println的執(zhí)行順序不同會導致最后程序輸出的結果也不同。

具體的題目我肯定記不清,不過我們可以換個直接的問法,如果類A和類B中有靜態(tài)變量,靜態(tài)語句塊,非靜態(tài)變量,非靜態(tài)語句塊,構造函數(shù),靜態(tài)方法,非靜態(tài)方法,同時類A繼承類B,請問當實例化A時,類內部的加載順序是什么?

當時我也是一頭霧水,事后我就自己寫了一個小Demo,這才知道了類內部的實際加載順,測試代碼如下:

Class B:

public class B{//靜態(tài)變量static int i=1;//靜態(tài)語句塊static {System.out.println("Class B1:static blocks"+i);}//非靜態(tài)變量int j=1;//靜態(tài)語句塊static{i++;System.out.println("Class B2:static blocks"+i);}//構造函數(shù)public B(){i++;j++;System.out.println("constructor B: "+"i="+i+",j="+j);}//非靜態(tài)語句塊{    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)語句塊static {System.out.println("Class A1:static blocks"+i);}//非靜態(tài)變量int j=1;//靜態(tài)語句塊static{i++;System.out.println("Class A2:static blocks"+i);}//構造函數(shù)public A(){   super();i++;j++;System.out.println("constructor A: "+"i="+i+",j="+j);}//非靜態(tài)語句塊{    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();}}

程序運行結果如圖:enter image description here

通過上述示圖,我們可以比較清晰的看出java類的整個加載過程。

  1. 若要加載類A,則先加載執(zhí)行其父類B(Object)的靜態(tài)變量以及靜態(tài)語句塊(執(zhí)行先后順序按排列的先后順序)。
  2. 然后再加載執(zhí)行類A的靜態(tài)變量以及靜態(tài)語句塊。(并且1、2步驟只會執(zhí)行1次)
  3. 若需實例化類A,則先調用其父類B的構造函數(shù),并且在調用其父類B的構造函數(shù)前,依次先調用父類B中的非靜態(tài)變量及非靜態(tài)語句塊.最后再調用父類B中的構造函數(shù)初始化。
  4. 然后再依次調用類A中的非靜態(tài)變量及非靜態(tài)語句塊.最后調用A中的構造函數(shù)初始化。( 并且3、4步驟可以重復執(zhí)行)
  5. 而對于靜態(tài)方法和非靜態(tài)方法都是被動調用,即系統(tǒng)不會自動調用執(zhí)行,所以用戶沒有調用時都不執(zhí)行,主要區(qū)別在于靜態(tài)方法可以直接用類名直接調用(實例化對象也可以),而非靜態(tài)方法只能先實例化對象后才能調用。

OK,今天就總結到這里了,如果有地方說的不好或有錯誤的地方,歡迎大家指出,定當改正,謝謝。

查看原文:http://www.xyczero.com/blog/article/6/.


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 日韩av官网| 久久久www视频 | 成人免费观看av | 一级成人欧美一区在线观看 | 精品国产一区二区三区久久久蜜 | 91av亚洲| 国产亚洲精品综合一区91555 | av在线免费在线观看 | 亚洲啪啪 | 成年免费观看视频 | 日本一区视频在线观看 | 久久里面有精品 | 国产精品视频成人 | 久久一区三区 | 久久午夜免费视频 | 国产免费观看视频 | 素人视频在线观看免费 | 日本aaaa片毛片免费观看视频 | 成人毛片视频在线观看 | 日本高清一级片 | 国产精品久久久av | 久久久国产精品成人免费 | 日本一区二区视频在线观看 | 国产精品一区视频 | 国产一国产一级毛片视频 | 一级黄色av电影 | 久久久日韩精品一区二区三区 | 国产乱色精品成人免费视频 | 日韩av日韩 | 在线看免费观看av | 99热高清| 亚洲免费视频一区二区 | 国产精品成人av片免费看最爱 | 天天干干 | 欧美亚洲一级 | 91成人久久 | 视频国产一区二区 | 成人福利在线观看 | 亚洲免费视频一区二区 | 综合日韩欧美 | 麻豆小视频在线观看 |