[問題] compile time的判斷

看板java作者 (小天)時間9年前 (2014/12/23 20:51), 編輯推噓0(0010)
留言10則, 2人參與, 最新討論串1/1
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

12/23 22:31, , 1F
全部static variables或block都是compile時就指定完成
12/23 22:31, 1F

12/23 22:33, , 2F
把static{}跟static var前後對調試試,以最後指定的為主
12/23 22:33, 2F

12/23 22:36, , 3F
由上到下執行,跟是否為static block或static field無關
12/23 22:36, 3F

12/23 22:51, , 4F
直接看byte code來比較差異,你會比較清楚
12/23 22:51, 4F

12/24 00:58, , 5F
我以為static final才是compile time
12/24 00:58, 5F

12/24 00:59, , 6F
static不是都runtime由class loader做的?
12/24 00:59, 6F

12/24 01:35, , 7F
我這樣說似乎有點誤導,應該說compile時就把static初始化
12/24 01:35, 7F

12/24 01:36, , 8F
的步驟就先確定好,然後第一次使用static field時才初始
12/24 01:36, 8F

12/24 01:37, , 9F
化,而final static你可看成C中的#define,compile時就會
12/24 01:37, 9F

12/24 01:38, , 10F
直接做常量的替換。
12/24 01:38, 10F
文章代碼(AID): #1KcMLRyY (java)