内部 class 概念中需要最终变量

Need of final variable in Inner class concept

我正在练习内部 Class 概念,在其中,方法局部内部 Class。

我很清楚final关键字的用法,但是在这个程序中,我无法理解它的意义:

//method local inner class example
package practice;

public class OuterClass 
{
    void my_Method()
    {
        final int n=23;                 //why final is required?
        class MethodInner_Demo
        {
            public void print()
            {
                System.out.println("This is method local inner class: "+n);
            }
        }
        MethodInner_Demo inner=new MethodInner_Demo();
        inner.print();
    }

    public static void main(String[] args) 
    {
        OuterClass outer=new OuterClass();
        outer.my_Method();
    }

}

而且没有使用final,这部分会报错,

System.out.println("This is method local inner class: "+n);

线程异常"main"java.lang.Error:未解决的编译问题: 无法引用封闭范围内定义的非最终局部变量 n

请说明!

谢谢。

此限制的原因主要与多线程问题有关,并确保从本地内部 class 访问时所有此类变量都具有明确定义的值。鉴于访问局部变量或参数的方法可以在定义局部内部 class 的方法完成后调用,因此局部变量和参数不再存在,因此必须先冻结这些变量的值创建本地内部 class 对象。如果需要,您可以将非最终变量复制到最终变量中,该最终变量随后由本地内部 class.

访问

参考 http://cs-fundamentals.com/java-programming/java-method-local-inner-classes.php