靜態變量在准備階段賦默認零值,在初始化階段賦用戶值,靜態代碼塊在初始化階段執行
本質上,static int a = 2
是要分成兩步
static int a;
static {a = 2}
也就是說,
准備階段,靜態變量賦予零值
初始化階段,靜態代碼塊執行(包括對靜態變量的賦值)
public class StaticBlockDemo { static int a = 2; static { // 如果在准備階段,則a = 0; // 如果在初始化階段, a = 2; System.out.println(a); } public static void main(String[] args) { } }