本帖最后由 张小锋 于 2012-5-6 20:05 编辑
在方法中的类部内中只能调用方法中的fianl修饰的变量,其实是JAVA中的一个骗局之一,(也难怪有人说sun公司的程序员是个骗子,这即使其中骗局之一)
当调用局部的final变量时,它其实不是调用这个变量本身,而是它生成的一个副本而已,
如声明final int i = 10,在内部类调用的不是i本身,而是它的一个COPY而已,只不过在java的编译器中中它给你做了实现,
为了不让人混淆,而且让人看起来用的就是i本身,所以要求i必须是final所修饰的变量才能使用。
如果要调用不是FINAL的变量就必须自己写一个实现Copy i的代码:示例:
public class Reflex{
public inte amethod(){
int i = 10; //此处并没有final修饰
class method_InnerClass implements inte {
public method_InnerClass(int i){
System.out.println(i);
}
}
return new method_InnerClass(i);
}
public static void main(String[] args){
Reflex inout= new Reflex();
inte in=inout.amethod();
}
}
也就是说如果你声明为final的局部变量的i,当你在内部类要用的时候,编译器就会自动加上例如上面的代码,因为JVM不懂什么方法内部类的机制的,方法内部类它只是当它是一般的类来处理的。
|