繁体   English   中英

局部内class

[英]Local inner class

我已经通读了内部 class 教程并且不明白一件事。 据说内部 class 包含对外部 class 的隐藏引用,所以我通过这个简单的 class 提出了几个问题:

public class OuterClass {

public void doSomething() {
    JButton button = new JButton();
    button.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent e) {                
      }
    });
  }
}

所以我们有一个本地内部 class 位于方法doSomething()中,我有一些问题。

  1. 这个本地内部 class 是否持有对 OuterClass 的引用,因为它是本地的?

  2. 在方法doSomething()终止后,这个本地内部 class 是否仍然是 memory ?

  3. 是否存在 OuterClass 符合 GC 条件但本地内部 class 仍被其他类引用的情况? 会发生什么?

  1. 是的,内部 class 引用了OuterClass实例。

    您可以通过在方法中访问OuterClass.this来验证这一点。

  2. 是的,内部 class 实例将在方法终止后继续存在。

    离开该方法不会影响 object 的使用寿命。 就像所有其他 object 一样,一旦不再引用它,它将有资格进行 GC。 由于JButton将持有对它的引用,因此它将保留在 memory 中。

  3. 只要内部OuterClass实例可以访问,OuterClass 实例就不能成为 GC 的条件。

    The reason for that is #1: the inner class instance has a reference to the outer class instance, which means that the outer class can not become eligible for GC as long as the inner class is not eligible at the same time (ie both are不再可达)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM