看板 java 關於我們 聯絡資訊
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? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.137.127.235 ※ 文章網址: http://www.ptt.cc/bbs/java/M.1419339099.A.F22.html
duckfly: 全部static variables或block都是compile時就指定完成 12/23 22:31
duckfly: 把static{}跟static var前後對調試試,以最後指定的為主 12/23 22:33
duckfly: 由上到下執行,跟是否為static block或static field無關 12/23 22:36
duckfly: 直接看byte code來比較差異,你會比較清楚 12/23 22:51
ssccg: 我以為static final才是compile time 12/24 00:58
ssccg: static不是都runtime由class loader做的? 12/24 00:59
duckfly: 我這樣說似乎有點誤導,應該說compile時就把static初始化 12/24 01:35
duckfly: 的步驟就先確定好,然後第一次使用static field時才初始 12/24 01:36
duckfly: 化,而final static你可看成C中的#define,compile時就會 12/24 01:37
duckfly: 直接做常量的替換。 12/24 01:38