在java中,外部类的对象必须和本地内部类的对象(方法的本地对象)一样在内存中吗?

在java中,外部类的对象必须和本地内部类的对象(方法的本地对象)一样在内存中吗?,java,Java,因为本地内部类可以引用外部类成员变量。如果要在方法外部使用局部内部类对象(可能在类外部)。外部类对象的内存不能标记为垃圾。如何管理本地内部类对象的内存 ` `内部类的实例维护对创建它的父对象的引用。您可以通过B从内部类访问它。在内部类的所有实例也超出范围之前,GC不会收集对象。C没有对B实例的引用,因为它是在静态方法中声明的。因此,它不会阻止GCing的B实例所有内部类,无论是否匿名,都将引用外部类并防止其被垃圾收集,除非内部类声明为静态 对于匿名内部类,这是不可能的,因此,是的,在方法“ano

因为本地内部类可以引用外部类成员变量。如果要在方法外部使用局部内部类对象(可能在类外部)。外部类对象的内存不能标记为垃圾。如何管理本地内部类对象的内存

`


`内部类的实例维护对创建它的父对象的引用。您可以通过
B从内部类访问它。在内部类的所有实例也超出范围之前,GC不会收集对象。

C没有对B实例的引用,因为它是在静态方法中声明的。因此,它不会阻止GCing的B实例

所有内部类,无论是否匿名,都将引用外部类并防止其被垃圾收集,除非内部类声明为静态


对于匿名内部类,这是不可能的,因此,是的,在方法“anonymous”中定义的任何类都将引用外部类。

您的类A不实现interfaceC是嵌套的,但不是内部的。如果它声明为静态的,则它不是内部类。请参阅JLS 8.1.3:“内部类是一个嵌套类,它不是显式或隐式声明为静态的。”是的,这有点像我说的,我说它们是内部的,并且它们引用外部类,除非它们是静态的,但是感谢您的澄清:)我看到您知道,我只是想澄清一下,因为很多人把任何成员类都称为“内部类”,但只有引用了外部类的成员类才可以称为内部类。OP发布的代码中没有内部类。@ErwinBolwidt是的,所以我现在明白了。好吧,我想他可能仍然对他的问题的答案感兴趣,因为我怀疑他打算用代码来演示这种情况,即当一个内部类实例似乎比外部类实例活得长时。
package inner;

interface A {
    int x = 123;

    public void print();
}

public class B {
    static A lict;
    static int z = 890;

    public static void main(String[] args) {
        final int y = 90;
        class C implements A {
            public void print() {
                System.out.println("X = " + x + " Y = " + y + " Z = " + z);
            }
        }

        lict = new C();
        B lic = new B();
        lic.printInnerClass();
    }

    public A printInnerClass() {
        lict.print();
        return lict;
    }
}

class D {
    A a;

    public void method() {
        B b = new B();
        a = b.printInnerClass();
    }
}