为什么Java内部类需要外部类的变量是最终的?

可能重复:
Java – 内部类和局部变量
如何将变量标记为最终允许内部类访问它们?

Local Inner类不仅可以访问实例变量,还可以访问方法的局部变量(也可以定义它们),但必须将local varible声明为final

为什么在这种情况下必须将局部变量声明为final

原因是可以从方法返回本地内部类的实例,并在方法返回之后返回。 在这种情况下,访问它们时,本地方法变量将不存在。
一旦你将它们定义为final,它们实际上是不变的,因此即使之后也可以安全访问。 对于更多详细信息,check out 不能引用内部类中的非final变量 。

你在谈论匿名课程。 局部变量(仅)必须是final由它们的实现引用,因为代码可能在未知的执行帧中执行,也可能在另一个线程中执行,因此编译器只希望使用一个值,如果它是一个常量,那么匿名类被实例化(声明) – 即变量是否为final