在Java的构造函数中创建的未分配对象的生存期是多少?

时间:2019-03-14 09:53:57

标签: java object constructor object-lifetime

我有一个定义构造函数的类(A),如下所示。在构造函数中,我通过向B传递了一个listener(interface)实现为B创建了一个对象,如下所示。

public class A {

    private String str;

    public A() {

       new B(new OnStringUpdatedListener() {

           public void onStringUpdated(String str) {
               A.this.str = str;
           }

       });
    }
}

在上面的代码中,B的对象未分配给A的任何字段或构造函数中的变量。

B对象的生存期是什么?构造函数执行完成后立即将其标记为垃圾回收,还是因为它注册了修改A字段的侦听器而仍然有效。

>

1 个答案:

答案 0 :(得分:4)

@Thomas的评论很好。

OnStringUpdatedListener修改什么都没有关系。执行完构造函数后,将无法通过任何引用访问B。它将有资格获得GC且可能被垃圾收集。