java基礎---初始化塊__java基礎學習
來源:互聯網
上載者:User
一、概念
作用:與構造器作用非常類似的是初始化塊,它也可以對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類的靜態初始化塊(如果有),然後執行父類的靜態初始化快... …最後才執行該類的靜態初始化塊。