马克社区吧 关注:484贴子:446
  • 0回复贴,共1

java中为什么局部内部类访问外边的局部变量时,必须为final?

只看楼主收藏回复

局部内部类访问外边的局部变量时,此变量必须为final类型
马克-to-win:就像我们永远有钱的限制一样,资源永远不是无限的。由于效率,包大小等各方面的考虑,java的设计者们做出如下语法规定:局部内部类访问外边的局部变量时,此变量必须为final类型,马克-to-win:否则会报一个错误:Cannot refer to a non-finalvariable i inside an inner class defined in a different method为什么?查一下,第二章的java堆和栈的区别:函数执行完后,Java会自动释放掉为函数里变量开辟的栈内存空间,该内存空间可以立即被另作他用。马克-to-win:加了final标记,编译器会做处理,不这么做!

例2.6
class ShellMark_to_win {
int x = 100;//x是类变量, 内部类访问时不用加final。
void test() {
for (int i = 0; i < 2; i++) {
/*马克-to-win:下面的y和str是局部变量,内部类访问时必须加final */
final int y=6;
final String str="aaa";
class Core {
void display() {
System.out.println("外部类的x=" + x+y+str);
}
}
Core inner = new Core();
inner.display();
}
// Core inner = new Core(); //错误找不到Core。
}
}
。。。。。。。。。。。。。。。。。
详情请进:http://www.mark-to-win.com/JavaBeginner/JavaBeginner4_web.html#LocalInnerClassFinal


回复
1楼2014-07-23 10:47

    扫二维码下载贴吧客户端

    下载贴吧APP
    看高清直播、视频!