[問題] 編譯過程。
幫朋友問的,
也不知道下這樣的標題對不對,
感覺比較像內部與外部變數定義問題?
原程式碼與問題如下:
//以下是原題目程式碼,題目要求指出錯誤之處
import static java.lang.System.*;
class Outer {
String s1 = "Outer object var";
public void omethod () {
String s2 = "Outer method var";
class Inner {
String s3 = "Inner object var";
public void imethod () {
String s4 = "Inner method var";
out.println(s1);
out.println(s2);
out.println(s3);
out.println(s4);
}
}
}
}
這是他的問題:
/*
編譯過後,錯誤是在s2的變數沒有宣告成final
書上是寫,因為Inner是屬於匿名內部類別
和s2都是屬於omethod()的變數
所以要把s2宣告成final才能在Inner裡使用
上網去查
是說把s2宣告成final之後
編譯時會在Inner裡面生成一個s2的隱藏複本變數,供Inner使用
我的問題是為什麼會這樣??
我只知道宣告成final代表該變數是常數,不可變更
可是為什麼在這邊編譯卻會這樣執行??
*/
--
我將我肢解,
腳,生殖器,頭,
最後,
卻忘了沒有手可以將手與身體的我分離。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.232.68.226
※ 編輯: HuangDon 來自: 118.232.68.226 (03/10 17:43)
推
03/12 11:59, , 1F
03/12 11:59, 1F