内部クラスは、Outer_class_object.new inner_class()
を使用して外部クラスの外部でインスタンス化できます。しかし、問題はOuterクラスのオブジェクトに何が起こるのでしょうか?それを参照する参照変数がないことを意味します。内部クラスが外部クラスをフィードしているので、内部クラスオブジェクトがヒープになるまでは明らかにヒープ上にあります。どのようなメカニズムjavaがそのような状況で使用するか? 次のコードを参照してください...
内部クラスのオブジェクトの作成に使用したNormalInnerClassDemoのメインの外部クラスオブジェクトはどうなりますか?それは '内部'が生きているまで生き続ける必要があります。参照変数はガベージコレクションに適格ではないという意味ではありませんか? Javaがどうやってガベージコレクタにそうしないように指示しているのでしょうか?
外部クラスオブジェクトが外部クラスの外部に作成された場合の外部クラスオブジェクトの参照
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のmainメソッドでは、Outerクラスのオブジェクト(その場で作成されたオブジェクト)を使用して内部クラスのオブジェクトを作成していますが、このオブジェクトには参照変数はありません。しかし、アウナーはインナーが生きるまで生き続ける必要があります。だから、JavaはGCに「外のオブジェクトを削除しないでください」と言っているのは、私がまだ使っている別のオブジェクト 'Inner'があるからです。 。 – omjego
@omjego内部クラスのインスタンスは、外部クラスへの非表示の参照を持ちますが、最初の文とは何の関係もありません。 – EJP