为什么局部内部类访问外边的局部变量必须为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++) {

            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
阅读更多

没有更多推荐了,返回首页