Java 在for循环中嵌套类,该类是否有n个实例?
我想知道嵌套类如何在for循环中工作: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循环完成后,嵌套类中的对象是否会保留在内存中? 可以从程序中的其他地方调用它吗
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:我意识到他可能是那个意思,于是扩展了我的答案。