一、類初始化過程
1、一個類要創建實例需要先創建和加載
(1) main方法所在的類需要先加載和實例化
2、一個子類要初始化,需要先初始化父類
3、一個類初始化就是執行<clinit>方法
(1) <clinit>() 方法由靜態類變量顯示賦值代碼和靜態代碼塊組成。
(2) 靜態類變量賦值海馬和靜態代碼塊從上到下順序執行
(3)<clinit>() 方法只執行一次
二、實例初始化過程(有父類時,父類先開始初始化)
1、實例初始化就是執行<init>()方法
(1)<init>()方法可能重載有多個,有幾個構造器就有幾個<init>方法
(2)<init>()方法由非靜態實例變量顯示賦值代碼和非靜態代碼塊、對應構造器代碼組成
(3)非靜態實例變量顯示賦值代碼和非靜態代碼塊從上到下順序執行,構造器的代碼最后執行
(4)每次創建實例對象,調用對應構造器,執行的就是對應的<init>方法
(5)<init>的方法的首行是super()或super(實參列表),即對應的父類<init>方法
注:子類如果重寫了父類的方法,通過子類對象調用的一定是子類重寫過的代碼
非靜態方法默認的調用對象是this
this對象在構造器或者說<init>方法中就是正在創建的對象
