2025-02-10

1、在new B一個實例時首先要進行類的裝載。(類隻有在使用New調用創建的時候才會被java類裝載器裝入)
2、在裝載類時,先裝載父類A,再裝載子類B
3、裝載父類A後,完成靜態動作(包括靜態代碼和變量,它們的級別是相同的,安裝代碼中出現的順序初始化)
4、裝載子類B後,完成靜態動作

類裝載完成,開始進行實例化
1、在實例化子類B時,先要實例化父類A
2、實例化父類A時,先成員實例化(非靜態代碼)
3、父類A的構造方法
4、子類B的成員實例化(非靜態代碼)
5、子類B的構造方法
 先初始化父類的靜態代碼—>初始化子類的靜態代碼–>初始化父類的非靜態代碼—>初始化父類構造函數—>初始化子類非靜態代碼—>初始化子類構造函數

測試代碼:

  1. abstract class base
  2. {         
  3.     public int age=getNumber(100);        
  4.     static{         
  5.         System.out.println(“base static block”);       
  6.     }
  7.     {          
  8.         System.out.println(“base nonstatic block”);        
  9.     }   
  10.     static int sage=getNumber(50);   
  11.     base(){       
  12.         System.out.println(age);       
  13.         System.out.println(“base start”);
  14.         draw();//會調用子類覆蓋後的方法,這兒是0!      
  15.         System.out.println(“base end”);           
  16.     }   
  17.     static int getNumber(int base){       
  18.         System.out.println(“base.getNumber int” base);
  19.         return base;   
  20.     }   
  21.     public  void draw(){       
  22.         System.out.println(“base.draw”);   
  23.         }
  24. }
  25. public class initializeOrder extends base{   
  26.     public int age=getNumber(1001);   
  27.     private int _radius=getNumber(10);   
  28.     static int sage=getNumber(250);   
  29.     static{       
  30.         System.out.println(“subclass static block”);   
  31.     }   
  32.     {       
  33.         System.out.println(“subclass nonstatic block”);
  34.     }
  35.     initializeOrder(int radius){       
  36.         _radius=radius;       
  37.         System.out.println(age);
  38.         draw();//這兒是1000
  39.         System.out.println(“initializeOrder initialized”);   
  40.     }   
  41.     public void draw(){
  42.         System.out.println(“initializeOrder.draw ” _radius);   
  43.         }     
  44.     public static void main(String[] args) {        // TODO Auto-generated method stub      
  45.         new initializeOrder(1000);   
  46.     }
  47. }
  48. 輸出為:
  49. base static block
  50. base.getNumber int50
  51. base.getNumber int250
  52. subclass static block
  53. base.getNumber int100
  54. base nonstatic block
  55. 100
  56. base start
  57. initializeOrder.draw 0
  58. base end
  59. base.getNumber int1001
  60. base.getNumber int10
  61. subclass nonstatic block
  62. 1001
  63. initializeOrder.draw 1000
  64. initializeOrder initialized

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *