時隔半年又去面試了一下,發現很多基礎知識都忘了,補補。
先看一個例子:
結果如下:
解釋如下:
類初始化過程:
1.一個類要創建實例需要先加載並初始化該類。
main方法所在的類需要先加載和初始化。
2.一個子類初始化需要先初始化父類。
3.一個類初始化就是執行<clinit>()方法。
<clinit>()方法由靜態類變量顯示賦值代碼和靜態代碼塊組成。
類變量顯示賦值代碼和靜態代碼塊代碼從上到下順序執行。
<clinit>()方法只執行一次。
實例初始化過程:
1.實例初始化就是執行<init>()方法過程。
<init>()方法可能重載有多個,有幾個構造器就有幾個<init>()方法。
<init>()方法由非靜態實例變量顯示賦值代碼和非靜態代碼塊、對應構造器代碼組成。
非靜態實例變量顯示賦值代碼和非靜態代碼從上到下執行,對應的構造器最后執行。
每次創建實例對象,調用對應構造器,執行對應<init>()方法。
<init>()方法的首行是super()或super(實參列表),即對應的父類<init>()方法。
方法的重寫Override
1.哪些方法不可以被重寫:
final方法、靜態方法、private等子類不可見方法。
2.對象的多態性:
子類如果重寫了父類的方法,通過子類對象調用的一定是子類重寫的代碼。
非靜態方法默認的調用對象是this。
this對象在構造器或者說<init>()方法中就是正在創建的對象。