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

时间:2012-12-08 07:32:42

标签: java final

  

可能重复:
  Java - inner class and local variables
  How does marking a variable as final allow inner classes to access them?

Local Inner类不仅可以访问实例变量,还可以访问方法的局部变量(也可以在其中定义),但必须声明局部变量final

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

2 个答案:

答案 0 :(得分:5)

原因是可以从方法返回本地内部类的实例,并在方法返回之后返回。在这种情况下,访问它们时,本地方法变量将不存在 一旦你将它们定义为final,它们实际上是不变的,因此即使之后也可以安全访问。 查看cannot refer to a non final variable inside a inner class了解详情。

答案 1 :(得分:4)

您正在谈论匿名类。局部变量(仅)必须final才能被其实现引用,因为代码可能在未知的执行帧中执行,也可能在另一个线程中执行,因此编译器唯一希望使用值的是它是否为常量在匿名类被实例化(声明)时 - 即变量是final