需要内部类概念中的最终变量

时间:2017-06-06 10:09:15

标签: java inner-classes final

我正在练习内部类概念,并在其中,方法本地内部类。

我非常了解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

请解释一下!

谢谢。

1 个答案:

答案 0 :(得分:2)

此限制的原因主要涉及多线程问题,并确保从本地内部类访问时所有此类变量都具有明确定义的值。假定在完成定义本地内部类的方法之后可以调用访问局部变量或参数的方法,因此局部变量和参数不再存在,那些变量的值必须在本地内部类之前被冻结对象已创建。如果需要,您可以将非final变量复制到最终变量中,然后由本地内部类访问。

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