在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();
}
}