Ich habe das innere Klassen-Tutorial gelesen und verstehe keins. Es wird gesagt, dass die innere Klasse einen versteckten Verweis auf die äußere Klasse enthält, daher stelle ich über diese einfache Klasse mehrere Fragen auf:
%Vor% Also haben wir eine lokale innere Klasse, die sich in der Methode doSomething()
befindet und ich habe einige Fragen.
Bezieht sich diese lokale innere Klasse auf OuterClass, da sie lokal ist?
Bleibt diese lokale innere Klasse Speicher, nachdem die Methode doSomething()
beendet wurde?
Gibt es eine Situation, in der OuterClass für GC in Frage kommt, aber die lokale innere Klasse immer noch von anderen Klassen referenziert wird? Was würde passieren?
Ja, die innere Klasse hat einen Verweis auf die OuterClass
-Instanz.
Sie können dies überprüfen, indem Sie in der Methode OuterClass.this
aufrufen.
Ja, die innere Klasseninstanz bleibt bestehen, nachdem die Methode beendet wurde.
Das Verlassen der Methode beeinflusst die Lebensdauer des Objekts nicht. Genau wie jedes andere Objekt wird es für GC infrage kommen, wenn es keine Referenzen mehr gibt. Da JButton
einen Verweis darauf enthält, bleibt es im Speicher.
Die OuterClass
-Instanz kann nicht für GC infrage kommen, solange die innere Klasseninstanz erreichbar ist.
Der Grund dafür ist # 1: Die innere Klasseninstanz hat einen Verweis auf die äußere Klasseninstanz, was bedeutet, dass die äußere Klasse nicht für GC infrage kommen kann, solange die innere Klasse nicht gleichzeitig berechtigt ist ( dh beide sind nicht mehr erreichbar).
Tags und Links java garbage-collection inner-classes