Java建立物件的順序

2021-06-21 13:24:16 字數 4108 閱讀 4274

建立乙個類

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 構造快...