※ 引述《losesong (shen)》之銘言:
: 大家好
: 小弟在練習使用匿名的inner class的時候遇到了點問題
: 請大家指點迷津一下
: 當我在inner class中去存取其外部class的某個field時
: 若這個field在外部class的建構式中才去宣告,那編譯時就會出現錯誤訊息
: 訊息內容是cannot find symbol,而該symbol就是指那個field
: 程式碼的大略示意圖如下:
: public class OuterClass {
: public OuterClass() {
: ClassA refA = new ClassA(); //ClassA有一個我想用到的methodA
: }
: InnerClass inner = new InnerClass() {
: public void innerMethod() {
: refA.methodA(); //此處發生編譯錯誤:cannot find symbol,symbol:varible refA
: }
: };
: }
: ===========================換個方法===================================
: 但是,假如我在建構式之外先宣告refA,進了建構式再進一步將它指派給ClassA,
: 此時就可通過編譯
: 程式碼的大略示意圖如下:
: public class OuterClass {
: ClassA refA;
: public OuterClass() {
: refA = new ClassA(); //ClassA有一個我想用到的methodA
: }
: InnerClass inner = new InnerClass() {
: public void innerMethod() {
: refA.methodA(); //這一次通過編繹了,why??
: }
: };
: }
: 想請教各位,為什麼我在建構式之外先宣告過,就不會編譯錯誤了呢??
: 或是請大家指點我一下,該去查什麼相關的資料,可以解釋這個現象呢??
: 謝謝各位~
用heap來解釋不曉得通不通......(解釋錯誤請見諒.....)
↑運算元
↑動態變數
↑建構子
↑靜態變數
所以在heap中擺放順序是
ClassA refA
建構子指定 refA instance
動態變數 Inner Class
運算元
不知道這樣子通否?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.232.237.53