面向對象上(知識點6:初始化塊)

1. 普通初始化塊

a. 前面定義的先執行,後面定義的後執行。

b. 初始化塊是在創建Java對象時隱式執行的,他們總是全部執行,所以完全可以把多個初始化塊合併到一起。

c. 普通初始化塊、聲明實例變量時指定的默認值都可以認爲是對象的初始化代碼

public class Demo{
    {
        a=6;
    }
    int a=9;
}
最後輸出a爲9,調換則爲6.

d. 初始化塊其實是一個假象,使用Javac命令編譯Java類之後,該java類中的初始化塊會消失,初始化塊會還原到每個構造器當中,並且位於構造器的最前面。

那麼爲什麼不直接放在構造器裏面呢?這樣做的話,如果有多個構造器,那麼每個構造器都要重複寫一遍這個代碼,把重複代碼抽出來放在初始化塊當中可以避免重複寫相同的代碼,並且效果是一樣的。

2. 靜態初始化塊(類初始化塊)

a. 系統在類初始化階段執行靜態初始化塊,而不是在創建對象時才執行。

b. 聲明靜態成員變量時指定默認的初始值,也可以當成是靜態初始化塊。

c. 當JVM第一次主動使用某個類時,系統會在類準備階段爲該類的所有靜態成員變量分配內存;在初始化階段負責初始化這些靜態成員變量。

3. 執行順序:

父類靜態初始化塊

子類靜態初始化塊

父類初始化塊

父類構造函數

子類初始化塊

子類構造函數

  • 其中靜態的只在類初始化階段執行一次,後面不會再執行,而初始化塊和構造器每次創建實例的時候都是會執行的


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章