java中最终局部变量的范围

时间:2012-05-20 01:02:10

标签: java inner-classes final local-variables

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

2 个答案:

答案 0 :(得分:7)

排序。 Java匿名内部类就像“闭包”一样,即它们“关闭”当前的本地状态。但是,Java只允许这些类靠近最终变量。如果没有,变量的本地状态可能会改变,但内部类中保存的版本不会,因此它将访问“过时”实例。这可能让程序员感到困惑。

相反,Java要求实例通过方法处理可变性,而不是变量重新分配。这样可以提高清晰度并允许更简单的调试。有关Java执行此操作的详细信息,请参阅this answer

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

答案 1 :(得分:1)

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