類裡含有靜態初始化物件的執行過程和順序

2021-08-03 07:46:37 字數 812 閱讀 2030

今天在做牛客網上的題時,注意到了乙個題是關於靜態物件的初始化的問題

之前發現類載入的順序是 :

父類的靜態**塊和靜態物件->子類的靜態**塊和靜態物件->父類非靜態**塊和物件->父類建構函式->子類非靜態**塊和物件->子類建構函式

今天做這個題時,立馬根據上面的順序排出掉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修飾的同名的變數,無論哪乙個改變,其他的也會改變,一...