建立乙個類
c的物件:
1. 載入所有得類。
2. 執行靜態初始化。
3. 分配記憶體,並初始化為零。
4. 處理呼叫的c的建構函式的引數。
6. 處理隱式或者顯式的建構函式( this()或者super())。
7. 初始化c中的變數。
8. 執行c的「instance initialization」。
9. 執行
呼叫的c的建構函式。
class
base
int
basicchoice
=100;
base()
private
base(void check)
private
static
void checkvalue(
int
choice)
else
return
null;
} }
public
class
constructororder
extends
base
public
constructororder()
public
constructororder(
boolean
result)
else}
private
static
boolean
check()
public
static
void
main(string args) }
執行結果是:
begin to initialize static block of base!
begin to initialize static block of constructororder!
check return true!
choice is right!
i am instance initialization of base!
in base instance initialization,base::basicchoice=100
in base constructor base(void check)
in base constructor base(int choice), base::basicchoice=100
in base constructor base(int choice), base::basicchoice=240
i am instance initialization of constructororder !
in constructororder constructor constructororder(boolean result), paramter is true
in constructororder constructor constructororder(),outconstructor_length=240;name=null
in constructororder constructor constructororder(),outconstructor_length=10;name=niannian
對執行結果的解釋:
1. 執行 「constructororder obj = new constructororder()". 這觸發constructororder.class的呼叫,因為constructororder繼承base,所以接著呼叫base.class.
2. 執行base類中的靜態初始化:
static
3. 執行constructor類中的靜態初始化:
static
4. 繼續處理」constructororder obj = new constructororder()"中呼叫建構函式的傳遞引數,呼叫的是無引數建構函式,不需要特別處理。
5. 開始執行constructororder(),
5.1首先執行顯式或者隱式呼叫的this或者super。在這個程式中是顯式的呼叫"this(check())"。就是執行constructororder(check())。
6.執行constructororder(check())
6.1 首先處理引數check(),就是執行函式check(),輸出:「check return true!」。
6.2 接著處理建構函式「constructororder(boolean result)」中隱式呼叫的super()。
7.開始執行建構函式base()
7.1 處理this(checkvalue(240));也就是處理base(checkvalue(240))。
8.處理base(checkvalue(240))
8.1 首先處理引數,就是執行函式checkvalue(240),輸出:「choice is right!"
8.2 處理隱式的object().
9.object物件構造完,初始化base類中的變數。
int basicchoice=100;
10.執行base中的"instance initialization"。輸出:
i am instance initialization of base!
in base instance initialization,base::basicchoice=100
11.接著繼續執行步驟8,就是base(void)剩下的部分。輸出:in base constructor base(void check)
12. 接著繼續執行步驟7,就是執行base()剩下的部分。
12.1輸出:in base constructor base(int choice), base::basicchoice=100
12.2執行」basicchoice = 240「
12.3接著輸出:in base constructor base(int choice), base::basicchoice=240
13. 初始化完base類後,初始化constructororder類中的變數。
int outconstructor_length=basicchoice;
string name;
14. 接著執行constructororder中的"instance initialization"。輸出:i am instance initialization of constructororder !
15. 接著繼續執行步驟6,就是constructororder(boolean)剩下部分。輸出:
in constructororder constructor constructororder(boolean result), paramter is false
16. 接著繼續執行步驟5,就是constructororder()剩下部分。
16.1輸出:in constructororder constructor constructororder(),outconstructor_length=240;name=null
16.2執行 「name = new string("niannian");」
16.3執行 「outconstructor_length=10;」
16.4輸出:in constructororder constructor constructororder(),outconstructor_length=10;name=niannian
17. obj物件建立完畢。
Java物件建立的順序
實踐出真知,上 package test 用來檢測建立順序的類 public class c package test 父類 public class astatic public static c c2 newc 父類 靜態成員變數 public c c newc 父類 普通成員變數 packag...
Java物件的建立
使用new關鍵字 使用物件的clone方法 使用反序列化 使用class類的newinstance方法 使用constructor的類的newinstance方法 方式一 person lamze new person lamze 18 方式二 使用clone方法建立物件 步驟 1 要建立的物件的類...
java物件的建立過程
以一道例題開始 public class test static public test string str public static int print string str public static void main string args 執行結果是 1 j i 0 n 0 2 構造快...