1. 程式人生 > >靜態程式碼塊與非靜態程式碼塊的區別(Java)

靜態程式碼塊與非靜態程式碼塊的區別(Java)

    靜態程式碼塊是以static修飾的程式碼塊,反之沒有用static修飾的程式碼塊為非靜態程式碼塊,如下所示:

靜態程式碼塊:


static{

若干程式碼

}

非靜態程式碼塊:

{

若干程式碼

}

它們之間的區別主要如下:

  1. 靜態程式碼塊在虛擬機器載入類的時候就執行(只執行一次),而非靜態程式碼塊每一次new的時候都會執行一次。
  2. 由於靜態程式碼塊在虛擬機器載入類的時候就執行,因此在非靜態程式碼塊在靜態程式碼塊後執行

如何驗證靜態程式碼塊比非靜態程式碼塊先執行,我們做了一個小小的例項:

package FF;

public class SCB {

	public static void main(String[] args) {

		{
			System.out.println("程式碼塊被執行");
		}
		
	}
	static {
		
		System.out.println("靜態程式碼塊被執行");
		
	}
}

結果如下:

靜態程式碼塊被執行
程式碼塊被執行

驗證了,完全OK

我們要注意的是靜態程式碼塊不能放在main方法中,不然會編譯錯誤。比如這樣:

package FF;

public class SCB {

	public static void main(String[] args) {

		{
			System.out.println("程式碼塊被執行");
		}
		
		
		static {
			
			System.out.println("靜態程式碼塊被執行");
			
		}
	}
	
}

會明顯出現:Syntax error on token "static", delete this token

    通過上面的例子,我們也能看出,首先執行靜態程式碼塊而不是main。