Внутренние классы могут быть созданы вне внешнего класса, используя Outer_class_object.new inner_class()
. Но возникает вопрос, что происходит с объектом Outer class? означает, что ссылка на нее отсутствует. Очевидно, это будет на куче, пока внутренний объект класса не окажется в куче, потому что внутренние классы питаются внешним классом. Итак, какой механизм java использует в таких ситуациях? См. Следующий код ...
Что происходит с внешним объектом класса в основной части NormalInnerClassDemo, который мы использовали для создания объекта внутреннего класса. Он должен оставаться в живых до тех пор, пока «внутреннее» не будет живым. Нет ли ссылочной переменной, относящейся к нему, это не значит, что он имеет право на сбор мусора? Если не так, как Java удается сказать сборщику мусора, чтобы этого не сделать?
Ссылка на объект внешнего класса, когда объект класса Inner создается вне класса Outer
class Outer {
private String string = "Google";
class Inner {
public Inner() {
System.out.println("From Inner:" + string);
}
}
public void test() {
//Some code here
}
}
public class NormalInnerClassDemo {
public static void main(String[] args) {
Outer.Inner inner = new Outer().new Inner();
}
}
ваш вопрос непонятен. вы можете создать объект внешнего класса, а также создать его в соответствии с вашими потребностями. какова ваша фактическая проблема? –
В основном методе NormalInnerClassDemo мы создаем объект внутреннего класса с использованием объекта класса Outer (созданного «на лету»), который не имеет ссылочной переменной, указывающей на него. Но Наружный должен остаться в живых, пока Внутренний не будет жив.Итак, как Java говорит GC, что «не удалять внешний объект», потому что есть еще один объект «Inner», который я все еще использую! » , – omjego
@omjego Внутренний экземпляр класса имеет скрытую ссылку на внешний класс, но это не имеет никакого отношения к вашему первому предложению. – EJP