[問題] compile time的判斷

作者: kdok123 (小天)   2014-12-23 20:51:36
ex:
class A{
static int i = 1;// compile time
static{
i = 2;// run time
}
}
public static void main(String[] args)
{
new A();
}
根據我的知識,程式跑的順序是先static變數,static塊,最後才進到main new A()
所以我們可以說,compile time 和 runtime的分隔就是
static變數和static塊嗎?
在static變數之前都是compile time,之後發生的都是runtime?
作者: duckfly (Java ass)   2014-12-23 22:31:00
全部static variables或block都是compile時就指定完成把static{}跟static var前後對調試試,以最後指定的為主由上到下執行,跟是否為static block或static field無關直接看byte code來比較差異,你會比較清楚
作者: ssccg (23)   2014-12-24 00:58:00
我以為static final才是compile timestatic不是都runtime由class loader做的?
作者: duckfly (Java ass)   2014-12-24 01:35:00
我這樣說似乎有點誤導,應該說compile時就把static初始化的步驟就先確定好,然後第一次使用static field時才初始化,而final static你可看成C中的#define,compile時就會直接做常量的替換。

Links booklink

Contact Us: admin [ a t ] ucptt.com