1. 程式人生 > >java建構函式初始化與執行順序問題

java建構函式初始化與執行順序問題

建構函式與類名 a. 類中的構造方法可以省略不寫的 b. 構造方法必須跟類名相同,普通的類方法能與類同名的,但是要返回一個值。 c. 構造方法都在new 物件的時候呼叫的 d. 一個類可以定義多個構造方法的 構造方法用來初始化類的物件,與父類的其它成員不同,它不能被子類繼承(子類可以繼承父類所有的成員變數和成員方法,但不繼承父類的構造方法)。因此,在建立子類物件時,為了初始化從父類繼承來的資料成員,系統需要呼叫其父類的構造方法。如果沒有顯式的建構函式,編譯器會給一個預設的建構函式,並且該預設的建構函式僅僅在沒有顯式地宣告建構函式情況下建立。 1,父類無任何構造,子類無構,有參,無參,有兩參四種情況都會初始化時或呼叫子類構造時自動呼叫父類的預設無參。然後執行子類構造。 2,父類定義了無參構造,子類無構,有參,無參,有兩參四種情況都會初始化時或呼叫子類構造時首先呼叫父類的無參。當然可以在子類中super()來顯示呼叫。然後執行子類構造。 3,父類定義了有參和無參,那麼子類必須顯示呼叫有參初始化父類變數,否則執行2. 4,父類只定義了有參,這是不會有預設無參,也沒有無參,則必須顯示呼叫有參初始化父類變數,否則執行2,報錯。
靜態變數靜態塊驚天方法,牢記初始化順序(完全是這個)=》只初始化一次 虛擬機器在首次載入Java類時,會對靜態成員變數、靜態初始化塊、靜態方法進行一次初始化。只執行一次,不隨建立再執行。我們不要去糾結這裡的順序,一般來說我們只需要知道,靜態方法一般在最後。 父類靜態變數>父類B靜態程式碼塊->子類靜態變數-》子類A靜態程式碼塊->父類B非靜態程式碼塊->父類B建構函式->子類A非靜態程式碼塊->子類A建構函式 靜態初始化按宣告順序