看板 java 關於我們 聯絡資訊
推 ozone:剛試了一下 initializer似乎是跑在constructor前面的?! 05/04 02:18 instance initializer 與 field initializer 都是由編譯器 insert/inline 到每一 個 constructor 裡最前面(after super constructor invocation)。 class Bar { public Bar(int n){} } class Foo extends Bar { String name = "A"; { name = "B"; } public Foo() { super(0); name = ""; } public Foo(String s) { super(0); name = s; } } 編譯出來的 class bytecode 會等同於(以 sun's Java Compiler 來說): class Foo extends Bar { String name; public Foo() { super(0); name = "A"; name = "B"; name = ""; } public Foo(String s) { super(0); name = "A"; name = "B"; name = s; } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.173.138.198
zeat:嗯, 變數的給值跟block的執行的確是在constructor之前. 05/04 11:10
macbuntu:但是第一行是 this(...) 的 constructor 就不會加喔, 05/04 11:58
macbuntu:不然會重複 initialize 05/04 12:00
sbrhsieh:感謝 macbuntu 的補充說明 05/04 14:19