java - java中最终局部变量的范围

标签 java inner-classes final local-variables

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

最佳答案

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

相反,Java 要求实例通过方法处理可变性,而不是变量重新分配。这导致更好的清晰度并允许更简单的调试。有关 Java 为什么这样做的更多信息,请参阅 this answer .

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

关于java - java中最终局部变量的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10669993/

相关文章:

java - 如何执行内部 Swingworker 类?

java - final 方法在 Java 中的确切工作方式

java - JLS中最终字段安全上下文的确切含义是什么

java - 如何在Java中修改Tuple2的值

java - Tomcat 出现 AccessDeniedException?

java - 有没有办法将 RAM 位置(在 java 中)设置为变量,以便我们可以检索值?

java - 使用比较器作为嵌入类,母类(在克隆中初始化)字段在比较方法中不可见

java - 了解 Java 内部类中的作用域

java - 未从属性文件获取整数值

java - 警报管理器有时会在错误的时间触发