1、乙個類要建立例項需要先載入並初始化該類
main方法所在的類需要先載入和初始化2、乙個子類要初始化需要先初始化父類
3、乙個類初始化就是執行clinit()方法
clinit每個類都有,自動生成 中文名類初始化方法例項初始化就是執行init方法 clinit方法由靜態類變數顯示賦值**和靜態**塊組成
類變數顯示賦值**和靜態**塊**從上到下順序執行(誰在上面誰先執行)
clinit方法只執行一次
init方法可能過載由多個,有幾個構造器就有幾個init方法1、哪些方法不可以被重寫init方法由非靜態例項變數顯示賦值**塊和非靜態**塊、對應構造器**組成
非靜態例項變數顯示賦值**和非靜態**塊從上到下順序執行,而對應構造器**最後執行
每次建立例項物件,呼叫對應構造器,執行的就是對應的init方法
init方法的首行是super()或super(實參列表),即對應父類的init方法
非靜態方法前面其實有乙個預設物件this,this在構造器或init他表示正在建立的物件,正在建立的物件是誰,就執行誰的重寫**(物件導向多型)這裡建立的是son物件,所以test()執行的就是son的重寫方法
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...