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