Method-Local内部类不能访问局部变量,因为方法结束后,方法局部内部类的实例可能还活着。但是一旦局部方法结束,局部变量就会消失。 我了解到方法局部内部类可以访问最终局部变量,这是否意味着方法结束后最终局部变量仍然存在?
最佳答案
有点。 Java 匿名内部类的行为类似于“闭包”,也就是说,它们围绕当前本地状态“关闭”。然而,Java 只允许这些类围绕最终变量关闭。如果没有,变量的本地状态可能会改变,但内部类中保存的版本不会,因此它将访问一个“过时”的实例。这可能会让程序员感到困惑。
相反,Java 要求实例通过方法处理可变性,而不是变量重新分配。这导致更好的清晰度并允许更简单的调试。有关 Java 为什么这样做的更多信息,请参阅 this answer .
由于该类仍然持有对变量的引用,所以您的问题的答案是是,在内部类放弃变量的所有权之前,该实例不会被垃圾回收。
关于java - java中最终局部变量的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10669993/