作者HuangDon (就像个金鱼鱼缸。)
看板java
标题[问题] 编译过程。
时间Tue Mar 10 17:41:06 2009
帮朋友问的,
也不知道下这样的标题对不对,
感觉比较像内部与外部变数定义问题?
原程式码与问题如下:
//以下是原题目程式码,题目要求指出错误之处
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)