为什么Java内部类要求外部类的变量是final?

为什么Java内部类要求外部类的变量是final?,java,final,Java,Final,可能重复: 局部内部类不仅可以访问实例变量,还可以访问定义它们的方法的局部变量,但局部变量必须声明为final 为什么在这种情况下局部变量必须声明为final?原因是局部内部类的实例可能会从方法返回,并在方法返回后持续。在这种情况下,当您访问局部方法变量时,它们将不存在。 一旦您将它们定义为最终值,它们实际上是恒定的,因此即使在之后也可以安全访问。 查看更多详细信息。您正在谈论匿名类。局部变量必须是final才能被它们的实现引用,因为代码可能在未知的执行帧中执行,也可能在另一个线程中执行,因此

可能重复:

局部内部类不仅可以访问实例变量,还可以访问定义它们的方法的局部变量,但局部变量必须声明为final


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

原因是局部内部类的实例可能会从方法返回,并在方法返回后持续。在这种情况下,当您访问局部方法变量时,它们将不存在。 一旦您将它们定义为最终值,它们实际上是恒定的,因此即使在之后也可以安全访问。 查看更多详细信息。

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

中的更多信息您在这里没有回答同样的问题吗?