什么是靜態(tài)初始化塊在類加載是只執(zhí)行一次?
什么是靜態(tài)初始化塊在類加載是只執(zhí)行一次?我下面最后的幾行定義了一個(gè)新的對(duì)象helloo,但是我嘗試打印age的時(shí)候,結(jié)果還是20。(黑體字部分)
public class HelloWorld {
? ??
? ? String name; // 聲明變量name
String sex; // 聲明變量sex
static int age;// 聲明靜態(tài)變量age
? ??
? ? // 構(gòu)造方法
public HelloWorld? ?() {?
System.out.println("通過(guò)構(gòu)造方法初始化name");
name = "tom";
}
? ??
? ? // 初始化塊
{?
System.out.println("通過(guò)初始化塊初始化sex");
sex = "男";
}
? ??
? ? // 靜態(tài)初始化塊
? ? static? ? {?
System.out.println("通過(guò)靜態(tài)初始化塊初始化age");
age = 20;
}
? ??
public void show() {
System.out.println("姓名:" + name + ",性別:" + sex + ",年齡:" + age);
}
? ??
public static void main(String[] args) {
? ? ? ??
? ? ? ? // 創(chuàng)建對(duì)象
HelloWorld hello = new HelloWorld();
// 調(diào)用對(duì)象的show方法
? ? ? ? hello.show();
? ? ? ? HelloWorld helloo = new HelloWorld();
? ? ? ? System.out.println(helloo.age);
? ? ? ??
}
}
2020-12-30
你創(chuàng)建一個(gè)對(duì)象時(shí),相當(dāng)于類的實(shí)例化,此時(shí)會(huì)對(duì)類執(zhí)行一次,當(dāng)你再創(chuàng)建一個(gè)對(duì)象時(shí),由于靜態(tài)初始化塊只會(huì)執(zhí)行一次,所以并不會(huì)再對(duì)類進(jìn)行實(shí)例化了。你這最后面的System.out.println(helloo.age);是輸出hello.age,和對(duì)類執(zhí)行時(shí)不一樣的。(個(gè)人看解肯能有誤?)