今天在做牛客網上的題時,注意到了乙個題是關於靜態物件的初始化的問題
之前發現類載入的順序是 :
父類的靜態**塊和靜態物件->子類的靜態**塊和靜態物件->父類非靜態**塊和物件->父類建構函式->子類非靜態**塊和物件->子類建構函式
今天做這個題時,立馬根據上面的順序排出掉a和b,結果檢視答案瞬間傻眼了,於是就自己在eclipse測試了一下
實驗**:
package com.xaut.cherry.niukewang0702;
public class staticmethodconstructor
static
static
public static void main(string args) // (14)結束
}為了看的明白,多寫了幾個靜態**塊和非靜態**塊
實驗結果:
並且用debug進行除錯,發現:
發現該段程式的執行順序如右邊標註的數字所示。
對於該類,首先執行的是兩個非靜態**塊,然後再進入該類,執行靜態物件的定義和初始化,按順序執行靜態**塊,再到main函式裡面先執行輸出空行,再是一般物件的初始化,最後再執行兩個非靜態的**塊。
但是當我把類裡面的定義靜態物件那行注釋掉之後,發現執行的順序和最上面的那個順序一致
實驗結果:(//static staticmethodconstructor ex1 = new staticmethodconstructor();)
由上面的對比發現,如果乙個類裡面有靜態的初始化的物件,則首先執行非靜態**塊,然後再是靜態**塊,之後的就和正常一樣。注意靜態**塊只執行一次。
初始化類物件
初始化類物件 趙湘寧問題 c 中如何初始化類中的表資料?在c語言中,我能像下面這樣初始化結構陣列 struct mystruct mystruct table etc 但是如果mystruct是個c 類,而不是結構,我編譯就會出錯。我覺得這是c 的乙個不足。解答 這個問題完全取決於你如何看待c c ...
靜態物件如何初始化?
介紹 當編譯乙個c 程式時,計算機的記憶體被分成了4個區域,乙個包括程式的 乙個包括所有的全域性變數,乙個是堆疊,還有乙個是堆 heap 我們稱堆是自由的記憶體區域,我們可以通過new和delete把物件放在這個區域。你可以在任何地方分配和釋放自由儲存區。但是要注意因為分配在堆中的物件沒有作用域的限...
類和物件 初始化
一般的訪問許可權修飾符 public protected private 預設,對class修飾一般用public 預設,乙個原始檔中只能有乙個public修飾的類,static 靜態的,static修飾的變數成為靜態變數,是共享的,和static修飾的同名的變數,無論哪乙個改變,其他的也會改變,一...