類的初始化階段

2021-08-27 20:33:09 字數 832 閱讀 8545

以下情況發生時,會觸發類的初始化

1:建立了類的例項

2:該類的static方法會被呼叫

3:static域被賦值

4:static域被呼叫(當前域不是乙個常量變數)[常量變數:用常量表示式初始化的簡單型別或string型別的final變數,所謂常量表示式就是指簡單型別值貨string物件的表示式]

5:子類被初始化的時候,父類也需要被初始化。

ps:對static域的引用只會導致實際申明的類被初始化。即使他可能通過子類名,子介面或者實現

public class staticfieldtest

}class staticchiled extends staticparent    

}class staticparent

public static int a;

}

輸出的結果為:

public class staticfieldtest

public static int get(string b,int a)

}inte***ce staticchiled extends staticparent

inte***ce staticparent

當前程式的輸出會初始化staticchiled,因為他雖然是static值被使用,但是他不是乙個常量變數。所以會觸發初始化

如果呼叫的是staticchiled.k,則不會觸發初始化,因為他是乙個常量變數。所以不會觸發

類的初始化

類的初始化通產有3種型別 使用初始化列表,在建構函式體中賦值,以及使用預設建構函式。先說前兩種 初始化列表與在建構函式體中賦值的區別在 呢?主要有兩點 第一,有的成員不能使用函式體中的 初始化。這其實就是初始化與賦值的區別 比如比如const 成員,引用型別,以及沒有定義預設建構函式的類,它們都必須...

類的初始化

類的初始化通產有3種型別 使用初始化列表,在建構函式體中賦值,以及使用預設建構函式。先說前兩種 初始化列表與在建構函式體中賦值的區別在 呢?主要有兩點 第一,有的成員不能使用函式體中的 初始化。這其實就是初始化與賦值的區別 比如比如const 成員,引用型別,以及沒有定義預設建構函式的類,它們都必須...

類的初始化

package 類的初始化 父類的初始化 1 j method 5 2 父類的靜態 塊 1 父類的例項初始化 1 super 最前 2 i test 3 父類的非靜態 塊 4 父類的無參構造 最後 非靜態方法前面其實有乙個預設的物件this this在構造器 或 它表示的是正在建立的物件 因為這裡是...