類的初始化和例項化

2022-07-02 01:24:09 字數 1026 閱讀 5626

2019-06-13 17:03:12 codegeekgao

分類專欄: 面試

之前有個認識的朋友出去面試,遇到了乙個類初始化和例項初始化的問題,本人也試著做,但是做錯了。一時茫然,好歹有幾年的開發經驗了,確連根本的基礎題都不會做了真是萬分羞愧,特地記錄一下,鞏固一下基礎。

首先有乙個father類:

public class father 

father()

public int test()

public static int method()

}

然後有個son類:

public class son extends father 

son()

public int test()

public static int method()

}

public static void main(string args) 

在做這個題之前,需要知道類的初始化和例項化的整個流程是如下:

初始化父類的靜態成員

初始化父類的靜態**塊

初始化子類的靜態成員

初始化子類的靜態**塊

初始化父類的非靜態成員

初始化父類的非靜態**塊

初始化父類的構造方法

初始化子類的非靜態成員

初始化子類的非靜態**塊

初始化子類的構造方法

需要注意的是因為類只會被載入一次,所以靜態方法和靜態**塊只會執行一次。

所以執行結果是:(5)(1)(10)(6)(9)(3)(2)(9)(8)(7)。

需要注意的是第五步時候父類的test方法被重寫,所以會呼叫子類的test方法,所以這裡輸出的是9而不是4,如果將父類的test方法更改方法名為test1,此時就直接輸出父親test1的4。

記住,面試有可能會標出一些語句的,讓你選擇這些語句的執行順序。不過只要知道原理,就沒什麼難的了。

類初始化和例項初始化

乙個類要建立例項需要先載入並初始化該類 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...

類的初始化和例項的初始化

有如下兩個類 father 父類 package com.yzx.test01 父類物件 父類初始化 1 j method 5 2 父類的靜態 塊 1 父類的例項化方法 1 super 最前 2 i test 3 父類的非靜態 塊 4 父類的無參構造 最後 非靜態方法前面其實有乙個預設物件this ...