public?class?Demo1{
?int?a;
?static{
?a=1;
?System.out.println("通過(guò)靜態(tài)初始化塊為變量a賦值:"+a);
?}
?public?static?void?main(String[]?args){
?}
}
運(yùn)行結(jié)果:
通過(guò)靜態(tài)初始化塊為變量a賦值:1
問(wèn)題:我在main方法里什么都沒(méi)有聲明和調(diào)用,系統(tǒng)怎么就可以運(yùn)行該靜態(tài)初始化塊呢?
public?class?Demo2{
?int?b;
?int?c;
?public?Demo2{
??b=7;
??System.out.println("通過(guò)構(gòu)造方法為變量b賦值:"+b);
?}
?{
???c=9;
???System.out.println("通過(guò)初始化塊為變量c賦值:"+c);
?}
?public?static?void?main(Sting[]?args){
??Demo2?hello2=new?Demo2();
?}
}
運(yùn)行結(jié)果:
通過(guò)初始化塊為變量c賦值:9
通過(guò)構(gòu)造方法為變量b賦值:7
問(wèn)題:在main方法中我只調(diào)用了構(gòu)造方法,為什么普通初始化塊也會(huì)運(yùn)行呢?從哪里運(yùn)行的呢?望高手解答,謝謝!
2016-01-02
靜態(tài)初始化代碼塊在 .class字節(jié)碼加載進(jìn)內(nèi)存時(shí),就開(kāi)始運(yùn)行了。
普通初始化塊先于構(gòu)造方法執(zhí)行。
2016-01-02
靜態(tài)代碼塊 > 構(gòu)造代碼塊 > 構(gòu)造方法
2016-01-02
第16行構(gòu)造方法少寫(xiě)了()