我想知道嵌套类如何在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/

  • 10-10 03:23