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();//會調用子類覆蓋后的方法 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); } }
運行結果:
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>
總結:1、類只有在使用New調用創建的時候才會被JAVA類裝載器裝入
2、JAVA類首次裝入時,會對靜態成員變量或方法進行一次初始化,但方法不被調用是不會執行的,靜態成員變量和靜態初始化塊級別相同,非靜態成員變量和非靜態初始化塊級別相同。
先初始化父類的靜態代碼--->初始化子類的靜態代碼-->
初始化父類的非靜態代碼--->初始化父類構造函數--->
初始化子類非靜態代碼--->初始化子類構造函數
3、創建類實例時,首先按照父子繼承關系進行初始化
4、類實例創建時候,首先初始化塊部分先執行,然后是構造方法;然后從
本類繼承的子類的初始化塊執行,最后是子類的構造方法
5、類消除時候,首先消除子類部分,再消除父類部分
posted on 2006-04-26 16:11 都市淘沙者 閱讀(321) 評論(1) 編輯 收藏 所屬分類: Java Basic/Lucene/開源資料