java中父類和子類初始化順序

順序

1. 父類中靜態成員變量和靜態代碼塊java

2. 子類中靜態成員變量和靜態代碼塊函數

3. 父類中普通成員變量和代碼塊,父類的構造函數測試

4. 子類中普通成員變量和代碼塊,子類的構造函數ui

 

其中「和」字兩端的按照代碼前後順序執行。spa

舉例

先看代碼:.net

Father類debug

 

[java]  view plain  copy
 
  1. public class Father {  
  2.     public String fStr1 = "father1";  
  3.     protected String fStr2 = "father2";  
  4.     private String fStr3 = "father3";  
  5.   
  6.     {  
  7.         System.out.println("Father common block be called");  
  8.     }  
  9.   
  10.     static {  
  11.         System.out.println("Father static block be called");  
  12.     }  
  13.   
  14.     public Father() {  
  15.         System.out.println("Father constructor be called");  
  16.     }  
  17.   
  18. }  
首先是Father類,該類有一個默認構造函數,有一個static的代碼塊,爲了方便查看結果,還有一個普通代碼塊。

 

Son類blog

 

[java]  view plain  copy
 
  1. package com.zhenghuiyan.testorder;  
  2.   
  3. public class Son extends Father{  
  4.     public String SStr1 = "Son1";  
  5.     protected String SStr2 = "Son2";  
  6.     private String SStr3 = "Son3";  
  7.   
  8.     {  
  9.         System.out.println("Son common block be called");  
  10.     }  
  11.   
  12.     static {  
  13.         System.out.println("Son static block be called");  
  14.     }  
  15.   
  16.     public Son() {  
  17.         System.out.println("Son constructor be called");  
  18.     }  
  19.   
  20.     public static void main(String[] args) {  
  21.         new Son();  
  22.         System.out.println();  
  23.         new Son();  
  24.     }  
  25.   
  26. }  

Son類的內容與Father類基本一致,不一樣在於Son繼承自Father。該類有一個main函數,僅爲了測試用,不影響結果。

 

在main函數中實例化Son。繼承

結果爲:ip

 

[java]  view plain  copy
 
  1. Father static block be called  
  2. Son static block be called  
  3. Father common block be called  
  4. Father constructor be called  
  5. Son common block be called  
  6. Son constructor be called  
  7.   
  8. Father common block be called  
  9. Father constructor be called  
  10. Son common block be called  
  11. Son constructor be called  

 

總結:

 

1,在類加載的時候執行父類的static代碼塊,而且只執行一次(由於類只加載一次);

2,執行子類的static代碼塊,而且只執行一次(由於類只加載一次);

3,執行父類的類成員初始化,而且是從上往下按出現順序執行(在debug時能夠看出)。

4,執行父類的構造函數;

5,執行子類的類成員初始化,而且是從上往下按出現順序執行。

6,執行子類的構造函數。

相關文章
相關標籤/搜索