**static可以初始化塊對數據進行賦值**
在類的聲明中,可以包含多個初始化塊,當創建類的實例時,就會依次執行這些代碼塊。如果使用 static 修飾初始化塊,就稱爲靜態初始化塊。
需要特別注意:**靜態初始化塊只在類加載時執行,且只會執行一次,同時靜態初始化塊只能給靜態變量賦值,不能初始化普通的成員變量。**
public class HelloWorld {
String name;
String sex;
static int age;
public HelloWorld () {
System.out.println("通過構造方法初始化name");
name = "tom";
}
{
System.out.println("通過初始化塊初始化sex");
sex = "男";
}
static{
System.out.println("通過靜態初始化塊初始化age");
age = 20;
}
public void show() {
System.out.println("姓名:" + name + ",性別:" + sex + ",年齡:" + age);
}
public static void main(String[] args) {
HelloWorld hello = new HelloWorld();
hello.show();
}
}
運行結果:
通過靜態初始化塊初始化age
通過初始化塊初始化sex
通過構造方法初始化name
姓名:tom,性別:男,年齡:20
通過結果我們可以看到程序運行時**靜態初始化塊最先被執行,然後執行普通初始化塊,最後才執行構造方法。由於靜態初始化塊只在類加載時執行一次,所以當再次創建對象 hello2 時並未執行靜態初始化塊。**