問題:乙個類的建構函式內的**常規上是在class static變數 或 static **區域執行完畢後才執行的,但是有些特例上往往和想象的不一樣。看下面的例子:**:/* * * 版權: ?2011 *
*/ /** * * * @see * @author yangjun2 * @email [email protected] * */ public class son extends parent public son() public static void main(string args) throws exception }
/* * * 版權: ?2011 *
*/ /** * * * @see * @author yangjun2 * @email [email protected] * */ public class client public static client getinstance() public void test() public static void main(string arg) throws exception }
/** * * * @see * @author yangjun2 * @email [email protected] * */ public class parent }
執行結果:
parent!
son name:gogogo,thisson@1fc2fb
son init static
son name:gogogo,thisson@79717e
ok!如果是乙個單獨的類son,不整合parent的話:
son init static
son name:gogogo,thisson@79717e
ok!但是繼承後出現了意想 不到的結果。
說明一下:
1.主體main函式,構造單例的client c ,執行c.test(),即new son() (第乙個son例項)
2.根據類初始化原則,先初始化父類parent,
3.因為parent有static **,先執行static **
4.parent static**裡面 獲取單例的client c執行c.test(),即new son (第2個son例項)
5.因為parent已經初始好,執行預設的建構函式
5.執行son建構函式的剩餘**,system.out.println("son name:"+name+",this"+this),注意,此時son static**沒有執行哦!
6.執行son 的static **
7.因為parent已經初始好,執行預設的建構函式
8.執行son建構函式的剩餘**system.out.println("son name:"+name+",this"+this)
9.執行主體main的剩餘**system.out.println("ok!");
經典類初始化例子
package classes class cache private static int sum public static int getsum private static synchronized void initializeifnecessary public class client...
java 類的初始化
載入順序 啟動類的static block最先載入 父類靜態成員 靜態 塊 子類靜態成員 靜態 塊 父類例項成員 塊 父類建構函式 子類例項成員 塊 子類建構函式 class singleton public static singleton getinstence public class tes...
Java 類的初始化
public class person person p new person 1 將 person.class 檔案載入到記憶體 2 在棧記憶體之中為 p 開闢空間 3 在堆記憶體中為 person 物件開闢空間 4 對 person 物件的成員變數進行預設初始化 name null,age 0 ...