内部 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
我正在练习内部 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