Java 在for循环中嵌套类,该类是否有n个实例?

Java 在for循环中嵌套类,该类是否有n个实例?,java,for-loop,inner-classes,nested-class,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

我想知道嵌套类如何在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();
  }
}
类外部{
int-outer_x=100;
无效测试(){

对于(inti=0;i,在方法中有一个类定义只是语法:它仍然是一个完全正常的类定义

对于您创建的
internal
对象(
newinternal()
),这意味着:

  • 每个对象都可以像其他对象一样,在循环迭代之后立即进行垃圾收集
  • 是的,对象最终将被垃圾收集
  • 该对象将一直保留,直到被垃圾回收,但无法从其他地方访问(因为没有对它的引用泄漏)
对于类本身,这意味着:

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

GC完全依赖于JVM . 如果内存不足,它将执行,并且GC有机会执行。

  • 否。在GC启动之前,对象将挂起在堆上
  • 是的,一旦GC启动
  • 它不会持续。不,它不会

例如,如果传入外部类实例(
this
)通过构造函数分配给内部类,并分配给内部类的字段,在这种情况下,内部类对象将保留在内存中,只要外部类实例在某处使用。

这与问题有什么关系?它没有解决OP的任何问题。我想,类的对象是指
内部的实例
@Andreas\D:我意识到他可能是那个意思,于是扩展了我的答案。