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

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

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
主站蜘蛛池模板: 60岁了天天要小伙子 | 欧美最猛性xxxxx69交 | 黑人巨大videosjapan高清 黑人好大 | 亚洲精品视频在线 | 范冰冰a级一级特级毛片 | 手机在线观看伦理片 | 欧美干b视频 | 国产成人91高清精品免费 | 亚洲成色 | 国产精品成人在线播放 | 国产精品毛片高清在线完整版 | 美女把腿开让我 | 美女草b | 成人影院vs一区二区 | 脱了白丝校花的内裤猛烈进入 | 王淑兰与铁柱全文免费阅读 | 天堂一区二区在线观看 | 亚洲第一成年免费网站 | 消息称老熟妇乱视频一区二区 | 99国产小视频 | 亚洲精品九色在线网站 | 日本深夜视频 | 欧美综合一区二区三区 | 好 舒服 好 粗 好硬 好爽 | 亚洲欧美日韩国产综合专区 | 91男人| 久9视频这里只有精品123 | 亚洲第一区欧美日韩精品 | 欧美日韩国产亚洲人成 | 国产区综合另类亚洲欧美 | 国自产在线精品免费 | 日韩欧美一区二区三区四区 | 婚前试爱全集免费观看 | 精品久久久久国产免费 | 日韩视频免费看 | 欧美成人aa久久狼窝动画 | 国产美女久久精品香蕉69 | 欧美操屁股 | 久久AV国产麻豆HD真实 | 亚洲免费黄色网 | 色综合久久98天天综合 |