靜態程式碼塊與非靜態程式碼塊的區別(Java)
阿新 • • 發佈:2018-12-23
靜態程式碼塊是以static修飾的程式碼塊,反之沒有用static修飾的程式碼塊為非靜態程式碼塊,如下所示:
靜態程式碼塊:
static{
若干程式碼
}
非靜態程式碼塊:
{
若干程式碼
}
它們之間的區別主要如下:
- 靜態程式碼塊在虛擬機器載入類的時候就執行(只執行一次),而非靜態程式碼塊每一次new的時候都會執行一次。
- 由於靜態程式碼塊在虛擬機器載入類的時候就執行,因此在非靜態程式碼塊在靜態程式碼塊後執行
如何驗證靜態程式碼塊比非靜態程式碼塊先執行,我們做了一個小小的例項:
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。