Java類初始的特殊例子

2021-08-26 06:01:57 字數 1425 閱讀 8800

問題:乙個類的建構函式內的**常規上是在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 ...