一、概念
- 作用:與構造器作用非常類似的是初始化塊,它也可以對Java對象進行初始化操作。
- 性質:是Java類裡可出現的第4種成員(Field、方法和構造器),它沒有名字,也沒有辨別,是以無法通過類、對象類調用初始化塊。初始化塊隻在建立Java對象時隐式執行,而且在執行構造函數之前執行。
二、使用
- 文法格式:
[修飾符]{
//初始化塊的可執行代碼
}
- 修飾符隻能是static,使用static修飾的初始化塊稱為靜态初始化塊
- 初始化塊裡的代碼可以包含任何可執行語句,包括定義局部變量、調用其他對象的方法、以及使用分支、循環語句等。
三、初始化塊和構造器
- 從某種程度上來看,初始化塊是構造器的補充,初始化塊總是在構造器之前執行。
- 與構造器差別:初始化塊是一段固定執行的代碼,它不能接受任何參數。是以初始化塊對同一個類的所有對象所進行的初始化處理完全相同。
- 使用場景:如果有一段初始化處理代碼對所有的對象完全相同,且無需接受任何參數,就可以把這段初始化處理代碼提取到初始化塊中。
- 使用好處:通過把多個構造器中的相同代碼提取到初始化塊中定義,能更好地提高初始化代碼的複用。
四、靜态初始化塊
- 靜态初始化塊是類相關的,系統将在類初始化階段執行靜态初始化塊,而不是在建立對象時才執行,是以靜态初始化塊總是比普通初始化塊先執行;
- 它通常對類Field執行初始化處理,不能對執行個體Field進行初始化處理;
- 屬于類的靜态成員,不能通路非靜态成員;
五、執行順序
- 一個類中可以有多個構造器,相同類型的初始化塊之間有順序:前面定義的初始化塊先執行,後面定義的初始化塊後執行;
- 普通初始化塊、聲明執行個體Field指定的預設值都可以認為是對象的初始化代碼,它們的執行順序與源程式中的排列順序相同;
- 建立一個Java對象時,不僅會執行該類的普通初始化塊和構造器,而且系統會一直上溯到Java.lang.Object類,先執行Java.lang.Object類的初始化塊,開始執行Java.lang.Object的構造器,依次向下執行其父類的初始化塊,開始執行其父類的構造器... …最後才執行該類的初始化塊和構造器,傳回該來的對象。
- 系統在類初始化階段執行靜态初始化塊時,不僅會執行本類的靜态初始化塊,而且會一直上溯上Java.lang.Object類(如果它也包含靜态初始化塊),先執行Java.lang.Object類的靜态初始化塊(如果有),然後執行父類的靜态初始化快... …最後才執行該類的靜态初始化塊。
新技術,新未來!歡迎大家關注 “1024工場”微信服務号 ,時刻關注我們的最新的技術訊息! (甭客氣!盡情的掃描或者長按!)