類b繼承類a,當例項化乙個b型別時,執行順序為:
a的靜態**塊->b的靜態**塊->a的構造**塊->a的無參建構函式->b的構造**塊->b的無參建構函式
public class test1
}class a
public a()
public a(int a)
}class b extends a
public b()
public b(int b)
}
執行結果:
靜態**塊,靜態,其作用級別為類,構造**塊、建構函式,構造,其作用級別為物件。
1、 靜態**塊,它是隨著類的載入而被執行,只要類被載入了就會執行,而且只會載入一次,主要用於給類進行初始化。
2、 構造**塊,每建立乙個物件時就會執行一次,且優先於建構函式,主要用於初始化不同物件共性的初始化內容和初始化例項環境。
3、 建構函式,每建立乙個物件時就會執行一次。同時建構函式是給特定物件進行初始化,而構造**是給所有物件進行初始化,作用區域不同。
通過上面的分析,他們三者的執行順序應該為:靜態**塊 > 構造**塊 > 建構函式。
Java繼承時的呼叫順序。
繼承時,我們往往會關注屬性和靜態屬性和構造方法之間的初始化順序是什麼樣的 答案是 先static 建立物件後 然後父類屬性,父類構造方法 最後子類屬性,子類構造方法。package beetle class insect static int x1 prt static insect.x1 init...
Java基礎 繼承方法呼叫順序
最近因為面試的原因,回過頭來複習基礎的知識,都忘光了,準備買本面試書回來啃。我先把自己測試的結論總結寫出來,以後忘記再來看看 如果b類繼承自a類,在main方法中new出b的物件 不帶引數 那麼他執行的順序是 父類a的靜態方法 類b的靜態方法 父類a的非靜態方法 不指定方法名 父類a的無參構造 這個...
java繼承的構造函式呼叫順序
1 首先呼叫父類的無參建構函式 這個建構函式必定會被呼叫 2 呼叫子類的無參建構函式或帶引數的建構函式 例 1 宣告抽象類爺爺 father of abstractclass public abstract class father of abstractclass protected father...