6

方法局部内部类无法访问局部变量,因为方法局部内部类的实例在方法结束后可能仍然存在。但是一旦局部方法结束,局部变量就会消失。我了解到方法局部内部类可以访问最终局部变量,这是否意味着最终局部变量在方法结束后仍然存在?

4

2 回答 2

8

有点。Java 匿名内部类的行为类似于“闭包”,也就是说,它们围绕当前本地状态“关闭”。然而,Java 只允许这些类围绕最终变量关闭。如果没有,变量的本地状态可能会改变,但内部类中保存的版本不会改变,因此它将访问“过期”实例。这可能会让程序员感到困惑。

相反,Java 要求实例通过方法而不是变量重新分配来处理可变性。这会带来更好的清晰度并允许更简单的调试。有关 Java 为何这样做的更多信息,请参阅此答案

由于该类仍然持有对该变量的引用,因此您的问题的答案是肯定的,在内部类放弃该变量的所有权之前,该实例不会被垃圾收集。

于 2012-05-20T01:09:17.310 回答
1

不,它没有。这意味着局部变量的副本仍然存在,在内部类实例中。“最终”只是确保两个副本的价值不会混淆。

于 2012-05-20T02:20:57.393 回答