類的生命週期包括加載(Loading)、驗證(Verification)、準備(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)、卸載(Unloading)等七個階段,其中驗證、準備和解析三個部分統稱爲鏈接(Linking)。而類的加載指的就是從加載到初始化這五個階段。java
初始化的時候會包含靜態代碼塊的執行和靜態變量的賦值code
初始化在裝載時不是必須觸發的,保證在初次主動使用對象前會觸發。對象
例:生命週期
class A{ static{ System.out.print("1"); } public A(){ System.out.print("2"); } } class B extends A{ static{ System.out.print("a"); } public B(){ System.out.print("b"); } } public class Hello { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub A ab = new B(); ab = new B(); } }
輸出結果: 1a2b2b虛擬機
靜態代碼塊,在虛擬機加載類的時候就會加載執行,並且只執行一次;it
非靜態代碼塊,在建立對象的時候(即new一個對象的時候)執行,每次建立對象都會執行一次io