靜態變數初始化順序

2022-08-30 16:30:31 字數 1536 閱讀 4193

1. **

------------begin a::a------------

a::a, from = a的物件

a::a, a.num01 = 0

a::a, b.num02 = 0

a::a, b.instance_a = null

------------end a::a------------

------------begin a::a------------

a::a, from = a的物件

a::a, a.num01 = 1

a::a, b.num02 = 1

a::a, b.instance_a = cn.zzz.day03.a@7852e922

------------end a::a------------

------------start b::b------------

b::b, from = b的物件

b::b, b.num02 = 1

b::b, a.num02 = 0

b::b, a.instance02_b = null

b::b, a.instance01_a = cn.zzz.day03.a@70dea4e

b::b, a.finalint = 97

b::b, a.finalstr = finalstr

b::b, a.finalinteger = null

------------end b::b------------

main, a.num01 = 1

main, b.num01 = 0

------------begin a::a------------

a::a, from = a的物件

a::a, a.num01 = 1

a::a, b.num02 = 1

a::a, b.instance_a = cn.zzz.day03.a@7852e922

------------end a::a------------

main, c.instance = cn.zzz.day03.a@5c647e05

3.初始化過程分析:(只分析列印的第乙個建構函式中)

(1)只有主動請求乙個類時,該類才會初始化。初始化僅包括靜態變數、函式等靜態部分

(2)繼承關係時先初始化父類,再初始化子類

(3)靜態變數會按照宣告順序,依次宣告並設定該型別的預設值,(此時不賦值為初始化的值)

(4)宣告完畢後,再按照宣告順序依次設定為初始化的值,如果沒有初始化則跳過

(5)當初始化到a.num01 = b.num02時,暫停初始化a.num01,設定當前類為b,跳轉到步驟3並執行

(6)當初始化到 b.instance_a = new a("a的物件")時,暫停初始化b.instance_a, 例項化a並賦值給b.instance_a

(7)(接上)例項化a的過程中,需要b.num02, b.num02的當前值為預設值0。 【b.instance_a的值,但是後者還未初始化並處於暫停狀態】; b.instance_a也是如此,當前值為null。

final非靜態變數初始化

size medium final變數可以在任何可以被始化的地方被始化,具體應該是建構函式之前或建構函式中,但只能被初始化一次.一旦被初始化後就不能再次賦 值 重新指向其它物件 作為成員變數一定要顯式初始化,而作為臨時變數則可以只定義不初始化 當然也不能引用 即使是作為乙個類中的成員變數,也還可以在...

C語言靜態變數初始化問題

以前在學習 語言中,看到了這麼一行 static int arr 100 這是一行很正常的 但是我 細心 的發現作者在使用它的時候並沒有初始化。書上的解釋是,用static修飾的變數會自動初始化。為什麼會被初始化呢?首先我們看一段話 可執行程式和記憶體映像的區別在於 可執行程式位於磁碟上,記憶體映像...

Java靜態變數初始化的坑

如圖所示的 class singleton public static singleton getinstance public class test 如圖所示的 執行之後的結果為 count 1 count 1 而這和我們想象中的兩個值分別為1,2不一樣,這是因為在test中呼叫getinstan...