類初始化和例項化過程

2022-05-11 05:33:45 字數 1877 閱讀 4196

1、乙個類要建立例項需要先載入並初始化該類

​ main方法所在的類需要先載入和初始化

2、乙個子類要初始化需要先初始化父類

3、乙個類初始化就是執行clinit()方法

​ clinit每個類都有,自動生成 中文名類初始化方法

​ clinit方法由靜態類變數顯示賦值**和靜態**塊組成

類變數顯示賦值**和靜態**塊**從上到下順序執行(誰在上面誰先執行)

clinit方法只執行一次

例項初始化就是執行init方法

init方法可能過載由多個,有幾個構造器就有幾個init方法

init方法由非靜態例項變數顯示賦值**塊和非靜態**塊、對應構造器**組成

非靜態例項變數顯示賦值**和非靜態**塊從上到下順序執行,而對應構造器**最後執行

每次建立例項物件,呼叫對應構造器,執行的就是對應的init方法

init方法的首行是super()或super(實參列表),即對應父類的init方法

非靜態方法前面其實有乙個預設物件this,this在構造器或init他表示正在建立的物件,正在建立的物件是誰,就執行誰的重寫**(物件導向多型)這裡建立的是son物件,所以test()執行的就是son的重寫方法

1、哪些方法不可以被重寫

final方法

靜態方法

private等子類中不可見方法

2、物件的多型性

子類如果重寫了父類的方法,通過子類物件呼叫的一定是子類重寫過的**

非靜態方法預設呼叫的物件是this

this物件在構造器或者說init方法中就是正在建立的物件

注:類變數和靜態**塊,誰的**在前面就先執行誰,注意子類是否重寫了父類方法

初始化父類類變數-->父類靜態**塊-->子類類變數-->子類靜態**塊-->父類非靜態例項變數顯示賦值**-->父類非靜態**塊-->父類構造方法-->子類非靜態例項變數顯示賦值**-->子類非靜態**塊-->子類構造方法

注:非靜態例項變數顯示賦值**和非靜態**塊從上到下順序執行,而對應構造器**最後執行,注意子類是否重寫了父類方法

子類非靜態例項變數顯示賦值**-->父類靜態域-->父類構造方法-->子類非靜態例項變數顯示賦值**-->子類靜態域-->子類構造方法

父類

/**

* @classname: father

* @description: 父類

* @author 超霸

* @date: 2021/1/24 14:01

*/public class father

father()

public int test()

private static int method()

}

子類
/**

* @classname: son

* @description: 子類

* @author 超霸

* @date: 2021/1/24 14:02

*/public class son extends father

son()

@override

public int test()

private static int method()

public static void main(string args)

}

(5)(1)(10)(6)(9)(3)(2)(9)(8)(7)

(9)(3)(2)(9)(8)(7)

類初始化和例項初始化過程

類初始化過程 乙個類要建立例項需要先載入並初始化該類 main方法所在的類需要先載入和初始化 乙個子類要初始化需要先初始化父類 乙個類初始化就是執行 方法 由靜態類變數賦值 和靜態 塊組成 靜態類變數賦值 和靜態 塊從上往下執行 方法只執行一次 例項初始化過程 例項初始化就是執行 方法 方法可能過載...

類初始化和例項初始化

乙個類要建立例項需要先載入並初始化該類 main方法所在的類需要先載入和初始化 乙個子類要初始化需要先初始化父類 乙個類初始化就是執行clinit 方法 clinit 方法由靜態類變數顯式賦值 和靜態 塊組成 類變數顯式賦值 和靜態 塊 從上到下順序執行 clinit 方法只執行一次 父類的初始化 ...

類初始化和例項初始化

father public class father father public inttest public static intmethod son public class sonextends father son public inttest public static intmethod...