靜態(tài)初始化塊
public class cat2{
static int ?f;
static double f2=11.5;
static{
System.out.println("cat2類的整數(shù)f靜態(tài)初始化塊已執(zhí)行。");
int f=11;
}
? ? public void show(){
? ? System.out.println("靜態(tài)變量f:"+f+", ?靜態(tài)變量f2:"+f2);
? ? }
public static void main(String[] args){
cat2 catty= new cat2();
System.out.println(catty.f);
System.out.println("用對象名訪問靜態(tài)變量f2:"+catty.f2);
catty.show();
? ?}
}
運(yùn)行結(jié)果:
cat2類的整數(shù)f靜態(tài)初始化塊已執(zhí)行。
0
用對象名訪問靜態(tài)變量f2:11.5
靜態(tài)變量f:0, ?靜態(tài)變量f2:11.5
為什么會這樣????我的靜態(tài)初始化塊沒寫錯吧??
2015-08-17
你記住在Java中{}通常代表了作用域,我們稱為“塊”,常見的有類,方法,初始化塊,try...catch等。
靜態(tài)初始化塊也是一個獨(dú)立的作用域,所以你可以在其中定義一個同名變量而不報錯,因?yàn)樗屯膺叺膄作用域不同。
不過因?yàn)殪o態(tài)初始化塊是局部作用域,所有可以可以訪問類成員,這時你必須去掉類型聲明,否則會變成變量的聲明而非引用。
2015-08-17
不能在靜態(tài)初始化快中賦值時添加類型。
static{
System.out.println("cat2類的整數(shù)f靜態(tài)初始化塊已執(zhí)行。");
f=11;
}
這樣就好了