Re: [問題] static runtime問題

作者: darkk6 (Mr. Pan)   2014-12-21 13:48:18
推 icydream: 我比較好奇的是,既然static member不需要instance,就 12/21 12:34
→ icydream: 可以呼叫使用,那為啥在撰寫的時候,卻可以使用instance 12/21 12:36
→ icydream: 來呼叫呢?(有warning,但不影響執行) 12/21 12:37
PS : 底下都是在 Oracle 的 JDK 的結果,其他 Compiler 會不會幫你做 我就沒研究了
這個其實和 AutoBoxing 一樣,是 Java Compiler 幫你做的事情
Keyword : Compiler Sugar 別只顧著吃糖阿...
這邊要注意到一點,就是你寫的 Code 並不是 100% 按照 Source Code
編譯成 .class 檔案,直接舉 AutoBoxing 來說,你寫的 Code 是這樣:
Integer a=1;
經過編譯器的時候先幫你 Boxing 變成
Integer a = Integer.valueOf(1);
所以實際寫進 .class 的內容是
04 B8 00 02 4C B1 綠色的部分不一定,那是 method ref. index
PS : 參考 Java Byte Code
http://en.wikipedia.org/wiki/Java_bytecode_instruction_listings
04 = iconst_1 // 將常數 1 放進 stack
B0 00 02 = invokestatic #2 // 將 stack 的職傳入 Method No2 執行
// 在這裡 Method No2 是 Integer.valueOf
C4 = astore_1 // 將 reference 儲存到編號1的變數
B1 = return 是因為我的 main 裡面只有這一行,所以到底了要 return
參考圖片:
http://ppt.cc/Fte5
作者: icydream (巧虎)   2014-12-21 14:12:00
感謝,獲益良多
作者: darkk6 (Mr. Pan)   2014-12-21 14:32:00
發現我的 Son 打錯了 ..... 變太陽了 O.O

Links booklink

Contact Us: admin [ a t ] ucptt.com