java類的初始化順序
abstract class base { public int age=getNumber(100); static { System.out.println("base static block"); } { System.out.println("base nonstatic block"); } static int sage=getNumber(50); base() { System.out.println(age); System.out.println("base start"); draw();//會調(diào)用子類覆蓋后的方法 System.out.println("base end"); } static int getNumber(int base) { System.out.println("base.getNumber int"+base); return base; } public void draw() { System.out.println("base.draw"); } } public class initializeOrder extends base{ public int age=getNumber(1001); private int _radius=getNumber(10); static int sage=getNumber(250); static { System.out.println("subclass static block"); } { System.out.println("subclass nonstatic block"); } initializeOrder(int radius) { _radius=radius; System.out.println(age); System.out.println("initializeOrder initialized"); } public void draw() { System.out.println("initializeOrder.draw "+_radius); } /** *//** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub new initializeOrder(1000); } }
運行結(jié)果:
C:\java>java initializeOrder
base static block
base.getNumber int50
base.getNumber int250
subclass static block
base.getNumber int100
base nonstatic block
100
base start
initializeOrder.draw 0
base end
base.getNumber int1001
base.getNumber int10
subclass nonstatic block
1001
initializeOrder initialized
C:\java>
總結(jié):1、類只有在使用New調(diào)用創(chuàng)建的時候才會被JAVA類裝載器裝入
2、JAVA類首次裝入時,會對靜態(tài)成員變量或方法進(jìn)行一次初始化,但方法不被調(diào)用是不會執(zhí)行的,靜態(tài)成員變量和靜態(tài)初始化塊級別相同,非靜態(tài)成員變量和非靜態(tài)初始化塊級別相同。
先初始化父類的靜態(tài)代碼--->初始化子類的靜態(tài)代碼-->
初始化父類的非靜態(tài)代碼--->初始化父類構(gòu)造函數(shù)--->
初始化子類非靜態(tài)代碼--->初始化子類構(gòu)造函數(shù)
3、創(chuàng)建類實例時,首先按照父子繼承關(guān)系進(jìn)行初始化
4、類實例創(chuàng)建時候,首先初始化塊部分先執(zhí)行,然后是構(gòu)造方法;然后從
本類繼承的子類的初始化塊執(zhí)行,最后是子類的構(gòu)造方法
5、類消除時候,首先消除子類部分,再消除父類部分
posted on 2006-04-26 16:11 都市淘沙者 閱讀(321) 評論(1) 編輯 收藏 所屬分類: Java Basic/Lucene/開源資料