我知道靜態塊在任何事情之前運行。但是,在這裏,當調用B.test()時會發生什麼?執行和設置值的順序?後來,當b1設置爲null時,仍然如何b1.i評估爲20?執行順序,靜態塊,字段
class B
{
static int i;
static {
i = 20;
System.out.println("SIB");
}
static int test() {
int i = 24;
System.out.println(i);
return i;
}
}
public class Manager {
public static void main(String[] arg) {
B.test();
B b1 = null;
System.out.println(b1.i);
}
}
的輸出是:
SIB
24
20
B.test沒有設置任何靜態或實例變量,因此調用那就沒有長期效果。 (仔細閱讀它。) – 2012-04-19 20:28:58
順便說一句,從非靜態引用(如b1實例)訪問靜態成員是一種不好的做法。 – garbagecollector 2012-04-19 20:31:24