java 類載入及例項化的呼叫順序

2021-09-02 20:13:06 字數 2739 閱讀 6801

單獨乙個類的場景下,初始化順序為依次為 靜態變數和靜態**塊(看兩者的書寫順序),繼承的基類的建構函式,成員變數,被呼叫的建構函式。

**呈現:

public

class

test

}class

sonpublic

son(

int age)

private height height =

newheight

(1.8f);

static

public

static gender gender =

newgender

(true);

}class

height

}class

gender

else

}}

this is static code

this is a male.

initializing height 1.8 meters.

this is son.

稍微修改一下**,新增兩個基類,讓son繼承father, father繼承grandpa。

繼承的情況就比較複雜了。由於繼承了基類,還將往上回溯,遞迴地呼叫基類的無參構造方法。

在我們的例子中,在初始化靜態資料後,會先往上追溯,呼叫father的預設構造方法,此時再往上追溯到grandpa的預設構造方法。

注:如果在子類的構造方法中,顯式地呼叫了父類的帶參構造方法,那麼jvm將呼叫指定的構造方法而非預設構造方法。

基類和子類均有靜態資料,成員變數和構造方法的場景

我們繼續修改**,讓其最終呈現如下:

public

class

test

}class

grandpa

public

grandpa

(int age)

private height height =

newheight

(1.5f);

public

static gender gender =

newgender

(true

,"grandpa");

static

}class

father

extends

grandpa

public

father

(int age)

private height height =

newheight

(1.6f);

public

static gender gender =

newgender

(true

,"father");

}class

sonextends

father

public

son(

int age)

private height height =

newheight

(1.8f);

public

static gender gender =

newgender

(true

,"son");

}class

height

}class

gender

else

}public

gender

(boolean ismale, string identify)

else

}}

grandpa is a male.

this is static code

father is a male.

son is a male.

initializing height 1.5 meters.

this is grandpa.

initializing height 1.6 meters.

father is 50 years old.

initializing height 1.8 meters.

this is son.

在我們的示例中,載入順序應該是這樣的:

grandpa 靜態資料

father 靜態資料

son 靜態資料

grandpa 成員變數

grandpa 構造方法

father 成員變數

father 構造方法

son 成員變數

son 構造方法

一般來說,順序如下:

1.首先是父類的靜態變數和靜態**塊(看兩者的書寫順序);

2.第二執行子類的靜態變數和靜態**塊(看兩者的書寫順序);

3.第三執行父類的成員變數賦值

4.第四執行父類類的構造**塊

5.第五執行父類的構造方法

6.執行子類的構造**塊

7.第七執行子類的構造方法

總結,也就是說雖然客戶端**是new 的構造方法,但是構造方法確實是在整個例項建立中的最後乙個呼叫。

先靜態:具體是先父靜態》子靜態。

先父後子:先父的全部,然後後子的全部。

優先順序:父類》子類,靜態**塊》非靜態**塊》建構函式(與位置前後無關係)

Java類的例項化順序

類的例項化順序,比如父類靜態資料,建構函式,字段,子類靜態資料,建構函式,字段,他們的執行順序 先靜態 先父後子 先靜態 父靜態 子靜態 優先順序 父類 子類 靜態 塊 非靜態 塊 建構函式 乙個類的例項化過程 1,父類中的static 塊,子類的static 2,順序執行父類的普通 塊 3,父類的...

java 子類例項化後子類 父類各語句執行順序

解決問題 子類例項化後子類 父類語句誰先執行?條件 父類 子類各有屬性string型別的name 子類重寫父類printinfo 方法 實現 class animal public void printinfo public class t extends animal public static ...

解讀類載入 類初始化與例項化

要理解類載入和類初始化,必須了解類的生命週期,類的生命週期可簡要概括為五個階段,即載入 連線 初始化 使用 銷毀五個階段。類載入通常指類生命週期的前三個階段 載入階段 載入階段就是把經過編譯後的位元組碼檔案載入進記憶體,即把類資訊載入進jvm的方法區中,並在堆中建立乙個class物件,來作為類資訊的...