一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

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

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

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

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

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

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

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

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

Class B:

  1. public class B{ 
  2. //靜態變量   
  3. static int i=1; 
  4. //靜態語句塊 
  5. static { 
  6.     System.out.println("Class B1:static blocks"+i); 
  7. //非靜態變量 
  8. int j=1; 
  9. //靜態語句塊 
  10. static
  11.     i++; 
  12.     System.out.println("Class B2:static blocks"+i); 
  13. //構造函數 
  14. public B(){ 
  15.     i++; 
  16.     j++; 
  17.     System.out.println("constructor B: "+"i="+i+",j="+j); 
  18. //非靜態語句塊 
  19.   i++; 
  20.   j++; 
  21.   System.out.println("Class B:common blocks"+"i="+i+",j="+j); 
  22. //非靜態方法 
  23. public void bDisplay(){ 
  24.     i++; 
  25.     System.out.println("Class B:static void bDisplay(): "+"i="+i+",j="+j); 
  26.     return ; 
  27. //靜態方法 
  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. //靜態變量   
  3. static int i=1; 
  4. //靜態語句塊 
  5. static { 
  6.     System.out.println("Class A1:static blocks"+i); 
  7. //非靜態變量 
  8. int j=1; 
  9. //靜態語句塊 
  10. static
  11.     i++; 
  12.     System.out.println("Class A2:static blocks"+i); 
  13. //構造函數 
  14. public A(){ 
  15.     super(); 
  16.     i++; 
  17.     j++; 
  18.     System.out.println("constructor A: "+"i="+i+",j="+j); 
  19. //非靜態語句塊 
  20.   i++; 
  21.   j++; 
  22.   System.out.println("Class A:common blocks"+"i="+i+",j="+j); 
  23. //非靜態方法 
  24. public void aDisplay(){ 
  25.     i++; 
  26.     System.out.println("Class A:static void aDisplay(): "+"i="+i+",j="+j); 
  27.     return ; 
  28. //靜態方法 
  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.     } 

程序運行結果如圖:

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

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

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

2.然后再加載執行類A的靜態變量以及靜態語句塊。(并且1、2步驟只會執行1次)

3.若需實例化類A,則先調用其父類B的構造函數,并且在調用其父類B的構造函數前,依次先調用父類B中的非靜態變量及非靜態語句塊.最后再調用父類B中的構造函數初始化。

4.然后再依次調用類A中的非靜態變量及非靜態語句塊.最后調用A中的構造函數初始化。( 并且3、4步驟可以重復執行)

5.而對于靜態方法和非靜態方法都是被動調用,即系統不會自動調用執行,所以用戶沒有調用時都不執行,主要區別在于靜態方法可以直接用類名直接調用(實例化對象也可以),而非靜態方法只能先實例化對象后才能調用。

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

延伸 · 閱讀

精彩推薦
  • JAVA教程Java中的隨機數詳解

    Java中的隨機數詳解

    這篇文章主要介紹了Java中的隨機數,需要的朋友可以參考下 ...

    Java教程網4602019-11-08
  • JAVA教程javascript身份證驗證代碼

    javascript身份證驗證代碼

    對于客戶端驗證用戶輸入的身份證是否符合格式的代碼,需要的朋友可以參考下。 ...

    java教程網3112019-11-11
  • JAVA教程java解析dbf之通過javadbf包生成和讀取dbf文件

    java解析dbf之通過javadbf包生成和讀取dbf文件

    這篇文章主要介紹了java通過javadbf讀取和生成DBF文件的方法,大家參考使用吧 ...

    java教程網3552019-11-04
  • JAVA教程Java8新特性之字符串去重介紹

    Java8新特性之字符串去重介紹

    這篇文章主要介紹了Java8新特性之字符串去重介紹,新的字符串去重特性可以幫助減少應用中String對象的內存占用,目前該特性只適用于G1垃圾收集器,并且...

    junjie3872019-11-28
  • JAVA教程2個java希爾排序示例

    2個java希爾排序示例

    java希爾排序示例,希爾排序是插入排序的一種類型,也可以用一個形象的叫法縮小增量法,需要的朋友可以參考下 ...

    Java教程網2802019-11-22
  • JAVA教程java進行error捕獲和處理示例(java異常捕獲)

    java進行error捕獲和處理示例(java異常捕獲)

    通常來說,大家都是對Java中的Exception進行捕獲和進行相應的處理,有些人說,error就無法捕獲了。其實,error也是可以捕獲的。Error和Exception都是Throwable的子...

    java教程網1472019-10-30
  • JAVA教程Java反射機制的學習總結

    Java反射機制的學習總結

    總的來說,java反射機制是一個很好用的東西,用它可以解決很多死的東西,因為反射機制的靈活行很大,有了他,我們就不要花太多的時間來寫操做數據庫...

    java開發網1712019-10-14
  • JAVA教程spring boot之SpringApplication 事件監聽

    spring boot之SpringApplication 事件監聽

    這篇文章主要介紹了spring boot之SpringApplication 事件監聽,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    posuoren5102019-06-24
主站蜘蛛池模板: 日韩欧美国产综合精品 | 丝袜老师好湿好紧我要进去了 | 荡女人人爱全文免费阅读 | 日韩手机在线视频 | 爱色v| 动漫美女羞羞视频 | 激情小说欧美图片 | 午夜DV内射一区区 | 国产福利一区二区三区四区 | 91丝袜足控免费网站xx | 日韩亚洲人成在线综合 | 四虎成人免费观看在线网址 | 爱爱小视频免费看 | 我半夜摸妺妺的奶C了她软件 | 俄罗斯极品h在线 | 国产精品视频第一区二区 | 日日操日日舔 | 九九热视频免费观看 | 亚洲人成激情在线播放 | 日本免费一区二区三区四区五六区 | 日本狠狠操 | 亚洲邪恶天堂影院在线观看 | 亚洲高清国产拍精品影院 | 四虎精品视频在线永久免费观看 | 男人天堂视频网 | 成人欧美1314www色视频 | 99国产成人精品2021 | 高清不卡免费一区二区三区 | 无人区在线观看免费国语完整版 | 国产高清在线看 | 性色欲情网站IWWW | 午夜勾魂曲 | 国产成人在线影院 | 日本高清色视频www 日本高清免费观看 | 国产免费小视频 | 4444亚洲国产成人精品 | 亚洲欧美国产自拍 | 5g影院天天爽| 国产精品视频一区二区三区不卡 | 亚洲品质水蜜桃 | 久久受www免费人成_看片中文 |