2016-06-20 3 views
0

Es ist ein finalizerGuardian in der anoymous Klasse, warum dieser finalizerGuardian immer aufgerufen werden, wenn die Superklasse lief? Thx.Über den finalizerGuardian

Antwort

1

Es ist, weil SuperClass Instanz nicht erreichbar ist, wenn System.gc() aufgerufen wird. Guardian-Objekt finalisieren ist eine Instanzeigenschaft und muss daher finalisiert werden. Es gibt keine solche Entität wie "Klasse, die läuft".

Die main Methode ist zwar in der Superklasse, aber es bedeutet nichts über ihre Instanzen.

0

finalizerGuardian ist eine Instanz (nicht statisch oder Klassenvariable), und da Sie den Verweis auf SubClass entfernt/null gemacht haben, wird auch das nicht referenzierte Instanzobjekt finalizerGuardian sofort erfasst.

Als Instanzobjekt ist es nur aktiv, bis die SubClass aktiv ist.

0

Auch wenn der finalizerGuardian eine anonyme Klasse ist, ist er dem GC bekannt. Wenn der GC also läuft, sucht er nach Objekten, die aus dem Speicher gelöscht werden können und ruft ihre finalize() - Methode auf.

Jedes Mal, wenn Sie eine Instanz Ihrer SuperClass haben, wird eine Instanz Ihres finalizerGuardian erstellt und steht somit für den GC zur Verfügung.

+0

Ich weiß es eine Instanz von finalizerGuardian erstellen, wenn diese Hauptmethode aufrufen, aber es nicht Superklassenobjekt erstellen, weil es nur ein Unterklasseobjekt erstellen, also warum dieser FinalizerGuardian aufgerufen wurde? – Carlos

+0

Starten Sie einen Debugger und Sie werden sehen, dass der FinalizerGuardian wird instanziiert, wenn die SubClass erstellt wird. Das ist eines der Merkmale der Vererbung. – Frank

Verwandte Themen