所有最终变量都是由匿名类捕获的吗?
我以为我知道这个问题的答案,但经过一个小时左右的搜索,我找不到任何确认。
在此代码中:
public class Outer {
// other code
private void method1() {
final SomeObject obj1 = new SomeObject(...);
final SomeObject obj2 = new SomeObject(...);
someManager.registerCallback(new SomeCallbackClass() {
@Override
public void onEvent() {
System.out.println(obj1.getName());
}
});
}
}
假设 将其参数保存在某个位置,以便匿名子类的对象将存在一段时间。显然,此对象必须维护对 的引用,以便在调用它时可以正常工作。registerCallback
obj1
onEvent
但是,假设对象不使用,它是否仍然保持对 的引用,因此在对象存活期间不能被垃圾回收?我的印象是,所有可见的(或实际上是最终的)局部变量和参数都被捕获了,因此只要对象还活着,就无法进行GC'ed,但我找不到任何以某种方式表达的东西。obj2
obj2
obj2
final
它是否依赖于实现?
JLS中是否有一节可以回答这个问题?我无法在那里找到答案。