激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語(yǔ)言 - JAVA教程 - Java中類的加載順序剖析(常用于面試題)

Java中類的加載順序剖析(常用于面試題)

2019-12-13 10:40junjie JAVA教程

這篇文章主要介紹了Java中類的加載順序剖析(常用于面試題),本文直接給出代碼實(shí)例和運(yùn)行結(jié)果,給后給出了加載過(guò)程總結(jié),需要的朋友可以參考下

這其實(shí)是去年校招時(shí)我遇到的一道阿里巴巴的筆試題(承認(rèn)有點(diǎn)久遠(yuǎn)了-。-),嗯,如果我沒(méi)記錯(cuò)的話,當(dāng)時(shí)是作為Java方向的一道選做大題。當(dāng)然題意沒(méi)有這么直白,題目只要求你寫出程序運(yùn)行后所有System.out.println的輸出結(jié)果,其中程序是題目給的,而各個(gè)System.out.println的執(zhí)行順序不同會(huì)導(dǎo)致最后程序輸出的結(jié)果也不同。

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

當(dāng)時(shí)我也是一頭霧水,事后我就自己寫了一個(gè)小Demo,這才知道了類內(nèi)部的實(shí)際加載順,測(cè)試代碼如下:

Class B:

  1. public class B{ 
  2. //靜態(tài)變量   
  3. static int i=1; 
  4. //靜態(tài)語(yǔ)句塊 
  5. static { 
  6.     System.out.println("Class B1:static blocks"+i); 
  7. //非靜態(tài)變量 
  8. int j=1; 
  9. //靜態(tài)語(yǔ)句塊 
  10. static
  11.     i++; 
  12.     System.out.println("Class B2:static blocks"+i); 
  13. //構(gòu)造函數(shù) 
  14. public B(){ 
  15.     i++; 
  16.     j++; 
  17.     System.out.println("constructor B: "+"i="+i+",j="+j); 
  18. //非靜態(tài)語(yǔ)句塊 
  19.   i++; 
  20.   j++; 
  21.   System.out.println("Class B:common blocks"+"i="+i+",j="+j); 
  22. //非靜態(tài)方法 
  23. public void bDisplay(){ 
  24.     i++; 
  25.     System.out.println("Class B:static void bDisplay(): "+"i="+i+",j="+j); 
  26.     return ; 
  27. //靜態(tài)方法 
  28. public static void bTest(){ 
  29.     i++; 
  30.     System.out.println("Class B:static void bTest():    "+"i="+i); 
  31.     return ; 

Class A:

  1. public class A extends B{ 
  2. //靜態(tài)變量   
  3. static int i=1; 
  4. //靜態(tài)語(yǔ)句塊 
  5. static { 
  6.     System.out.println("Class A1:static blocks"+i); 
  7. //非靜態(tài)變量 
  8. int j=1; 
  9. //靜態(tài)語(yǔ)句塊 
  10. static
  11.     i++; 
  12.     System.out.println("Class A2:static blocks"+i); 
  13. //構(gòu)造函數(shù) 
  14. public A(){ 
  15.     super(); 
  16.     i++; 
  17.     j++; 
  18.     System.out.println("constructor A: "+"i="+i+",j="+j); 
  19. //非靜態(tài)語(yǔ)句塊 
  20.   i++; 
  21.   j++; 
  22.   System.out.println("Class A:common blocks"+"i="+i+",j="+j); 
  23. //非靜態(tài)方法 
  24. public void aDisplay(){ 
  25.     i++; 
  26.     System.out.println("Class A:static void aDisplay(): "+"i="+i+",j="+j); 
  27.     return ; 
  28. //靜態(tài)方法 
  29. public static void aTest(){ 
  30.     i++; 
  31.     System.out.println("Class A:static void aTest():    "+"i="+i); 
  32.     return ; 

Class ClassLoading :

  1. public class ClassLoading { 
  2.       
  3.     public static void main (String args[]) { 
  4.         A a=new A(); 
  5.         a.aDisplay(); 
  6.     } 

程序運(yùn)行結(jié)果如圖:

Java中類的加載順序剖析(常用于面試題)

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

1.若要加載類A,則先加載執(zhí)行其父類B(Object)的靜態(tài)變量以及靜態(tài)語(yǔ)句塊(執(zhí)行先后順序按排列的先后順序)。

2.然后再加載執(zhí)行類A的靜態(tài)變量以及靜態(tài)語(yǔ)句塊。(并且1、2步驟只會(huì)執(zhí)行1次)

3.若需實(shí)例化類A,則先調(diào)用其父類B的構(gòu)造函數(shù),并且在調(diào)用其父類B的構(gòu)造函數(shù)前,依次先調(diào)用父類B中的非靜態(tài)變量及非靜態(tài)語(yǔ)句塊.最后再調(diào)用父類B中的構(gòu)造函數(shù)初始化。

4.然后再依次調(diào)用類A中的非靜態(tài)變量及非靜態(tài)語(yǔ)句塊.最后調(diào)用A中的構(gòu)造函數(shù)初始化。( 并且3、4步驟可以重復(fù)執(zhí)行)

5.而對(duì)于靜態(tài)方法和非靜態(tài)方法都是被動(dòng)調(diào)用,即系統(tǒng)不會(huì)自動(dòng)調(diào)用執(zhí)行,所以用戶沒(méi)有調(diào)用時(shí)都不執(zhí)行,主要區(qū)別在于靜態(tài)方法可以直接用類名直接調(diào)用(實(shí)例化對(duì)象也可以),而非靜態(tài)方法只能先實(shí)例化對(duì)象后才能調(diào)用。

OK,今天就總結(jié)到這里了,如果有地方說(shuō)的不好或有錯(cuò)誤的地方,歡迎大家指出,定當(dāng)改正,謝謝。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品国产精品久久 | 成人永久免费 | 五月天影院,久久综合, | 一本色道久久久888 青青草好吊色 | 欧美日本综合 | 国产一级一区二区三区 | 久久久噜噜噜久久熟有声小说 | 国产人成免费爽爽爽视频 | 国产一区网址 | 国产精品99一区二区 | 性爱视频免费 | 免费国产一级淫片 | 日本高清黄色片 | 欧美另类综合 | 久久久久久久一区二区三区 | 超碰97最新| 亚洲综合视频网站 | 欧美成人鲁丝片在线观看 | 免费国产在线视频 | cosplay裸体福利写真 | 在线观看一二区 | 欧美a区 | 国产精品免费小视频 | 日韩精品一区二区免费视频 | 国产一区免费观看 | 日本黄网 | 99ri在线 | 粉嫩粉嫩一区二区三区在线播放 | 亚洲欧洲av在线 | 国产欧美精品一区二区三区四区 | 成人午夜在线观看视频 | 午夜国内精品a一区二区桃色 | 91精品国产91 | 亚洲片在线观看 | 成片免费观看视频大全 | 精品一区二区电影 | 亚洲午夜一区二区三区 | 欧美高清一级片 | 欧美性生活久久 | 黄色网址在线视频 | 欧美成人福利 |