Java中的靜態塊語句、塊語句精研

以下是一道筆試題: 
Java代碼  收藏代碼
  1. package com.example;  
  2.   
  3. public class Parent  
  4. {  
  5.     public Parent()  
  6.     {  
  7.         System.out.println("Parent>>>>>>>>>>>1");  
  8.     }  
  9.   
  10.     {  
  11.         System.out.println("Parent>>>>>>>>>>>2");  
  12.     }  
  13.     static  
  14.     {  
  15.         System.out.println("Parent>>>>>>>>>>>3");  
  16.     }  
  17. }  

Java代碼  收藏代碼
  1. package com.example;  
  2.   
  3. public class Child extends Parent  
  4. {  
  5.     public Child()  
  6.     {  
  7.         System.out.println("Child>>>>>>>>>>>1");  
  8.     }  
  9.   
  10.     {  
  11.         System.out.println("Child>>>>>>>>>>>2");  
  12.     }  
  13.     static  
  14.     {  
  15.         System.out.println("Child>>>>>>>>>>>3");  
  16.     }  
  17.   
  18.     public static void main(String[] args)  
  19.     {  
  20.         new Child();  
  21.     }  
  22. }  

請寫出上面程序的執行結果。 


此題是考查靜態語句塊、語句塊以及構造函數的執行順序。 

分析:對象的初始化順序:首先執行父類靜態的內容,父類靜態的內容執行完畢後,接着去執行子類的靜態的內容,當子類的靜態內容執行完畢之後,再去看父類有沒有非靜態代碼塊,如果有就執行父類的非靜態代碼塊,父類的非靜態代碼塊執行完畢,接着執行父類的構造方法;父類的構造方法執行完畢之後,它接着去看子類有沒有非靜態代碼塊,如果有就執行子類的非靜態代碼塊。子類的非靜態代碼塊執行完畢再去執行子類的構造方法。總之一句話,靜態代碼塊內容先執行,接着執行父類非靜態代碼塊和構造方法,然後執行子類非靜態代碼塊和構造方法。 
而且子類的構造方法,不管這個構造方法帶不帶參數,默認的它都會先去尋找父類的不帶參數的構造方法。如果父類沒有不帶參數的構造方法,那麼子類必須用supper關鍵子來調用父類帶參數的構造方法,否則編譯不能通過。 



因此執行結果是: 
Java代碼  收藏代碼
  1. Parent>>>>>>>>>>>3  
  2. Child>>>>>>>>>>>3  
  3. Parent>>>>>>>>>>>2  
  4. Parent>>>>>>>>>>>1  
  5. Child>>>>>>>>>>>2  
  6. Child>>>>>>>>>>>1  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章