天天看點

Java:初始化塊

一、概念 

  • 作用:與構造器作用非常類似的是初始化塊,它也可以對Java對象進行初始化操作。 
  • 性質:是Java類裡可出現的第4種成員(Field、方法和構造器),它沒有名字,也沒有辨別,是以無法通過類、對象類調用初始化塊。初始化塊隻在建立Java對象時隐式執行,而且在執行構造函數之前執行。 

二、使用 

  • 文法格式: 

[修飾符]{ 

//初始化塊的可執行代碼 

  • 修飾符隻能是static,使用static修飾的初始化塊稱為靜态初始化塊 
  • 初始化塊裡的代碼可以包含任何可執行語句,包括定義局部變量、調用其他對象的方法、以及使用分支、循環語句等。 

三、初始化塊和構造器 

  • 從某種程度上來看,初始化塊是構造器的補充,初始化塊總是在構造器之前執行。 
    • 與構造器差別:初始化塊是一段固定執行的代碼,它不能接受任何參數。是以初始化塊對同一個類的所有對象所進行的初始化處理完全相同。 
  • 使用場景:如果有一段初始化處理代碼對所有的對象完全相同,且無需接受任何參數,就可以把這段初始化處理代碼提取到初始化塊中。 
  • 使用好處:通過把多個構造器中的相同代碼提取到初始化塊中定義,能更好地提高初始化代碼的複用。 

四、靜态初始化塊 

  • 靜态初始化塊是類相關的,系統将在類初始化階段執行靜态初始化塊,而不是在建立對象時才執行,是以靜态初始化塊總是比普通初始化塊先執行; 
  • 它通常對類Field執行初始化處理,不能對執行個體Field進行初始化處理; 
  • 屬于類的靜态成員,不能通路非靜态成員; 

五、執行順序 

  1. 一個類中可以有多個構造器,相同類型的初始化塊之間有順序:前面定義的初始化塊先執行,後面定義的初始化塊後執行; 
  2. 普通初始化塊、聲明執行個體Field指定的預設值都可以認為是對象的初始化代碼,它們的執行順序與源程式中的排列順序相同; 
  3. 建立一個Java對象時,不僅會執行該類的普通初始化塊和構造器,而且系統會一直上溯到Java.lang.Object類,先執行Java.lang.Object類的初始化塊,開始執行Java.lang.Object的構造器,依次向下執行其父類的初始化塊,開始執行其父類的構造器... …最後才執行該類的初始化塊和構造器,傳回該來的對象。 
  4. 系統在類初始化階段執行靜态初始化塊時,不僅會執行本類的靜态初始化塊,而且會一直上溯上Java.lang.Object類(如果它也包含靜态初始化塊),先執行Java.lang.Object類的靜态初始化塊(如果有),然後執行父類的靜态初始化快... …最後才執行該類的靜态初始化塊。 

新技術,新未來!歡迎大家關注 “1024工場”微信服務号 ,時刻關注我們的最新的技術訊息! (甭客氣!盡情的掃描或者長按!)

Java:初始化塊