java - for循环中嵌套类,会不会有n个类的实例?

标签 java for-loop inner-classes nested-class

我想知道嵌套类在 for 循环中是如何工作的:

  • 类的对象会在每次交互后被销毁吗?
  • 类的实例会被“垃圾”自动销毁吗?
  • for 循环结束后,嵌套类中的对象是否会保留在内存中? 可以从程序的其他地方召回吗?

这是代码:

class Outer {
  int outer_x = 100;

  void test() {
    for(int i=0; i<10; i++) {
      class Inner {
        void display() {
          System.out.println("display: outer_x = " + outer_x);
        }
      }
      Inner inner = new Inner();
      inner.display();
    }
  }
}

class InnerClassDemo {
  public static void main(String args[]) {
    Outer outer = new Outer();
    outer.test();
  }
}

最佳答案

在方法中有一个类定义只是语法:它仍然是一个完全正常的类定义。

对于您创建的 Inner 对象 (new Inner()),这意味着:

  • 每个对象都将像任何其他对象一样有资格在循环迭代后立即进行垃圾回收
  • 是的,对象最终会被垃圾回收
  • 对象 会一直存在,直到它被垃圾回收,但无法从其他地方访问(因为没有泄漏对它的引用)。

对于类本身,这意味着:

  • 该类将照常加载(仅一次)
  • 不会在每次迭代时重新加载该类
  • 该类甚至不会在第二次调用 test 时重新加载
  • 类可以根据 GCing 类的正常规则(非常严格)进行 GC

关于java - for循环中嵌套类,会不会有n个类的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17020941/

相关文章:

java - Superpowered NDK Android : returning int succeeds in "extern" block, 调用函数失败

java - {} 格式不同?格式化困境

python - Pandas:在整个列中分配一个数字,直到结束

java - 将外部类中的值设置为内部类中检索到的值

java - 内部 AsyncTask 安全地访问外部 Activity 类私有(private)成员字段吗?

java - 如何访问(修改、添加元素)到 java 内部类中的 ArrayList/Collection?

java - 如何从 JPanel 组件(例如动态创建的下拉列表、文本字段)获取值

java - 如何从主类获取返回字符串

java - 在一个类中创建多个对象

Java - 列表组合