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