Der Zweck dieser Methode wird in der API-Dokumentation wie folgt erläutert :
Es wird aufgerufen, wenn die Java Virtual Machine festgestellt hat, dass kein Thread mehr auf dieses Objekt zugreifen kann, der noch nicht abgestorben ist, es sei denn, es handelt sich um eine Aktion, die durch die Finalisierung eines anderen Objekts ausgeführt wurde oder eine Klasse, die fertiggestellt werden kann ...
Der übliche Zweck von finalize
... besteht darin , Bereinigungsaktionen durchzuführen, bevor das Objekt endgültig gelöscht wird . Die Methode finalize für ein Objekt, das eine Eingabe- / Ausgabeverbindung darstellt, kann beispielsweise explizite E / A-Transaktionen ausführen, um die Verbindung zu trennen, bevor das Objekt endgültig gelöscht wird.
Wenn Sie sich außerdem für Gründe interessieren, aus denen Sprachentwickler entschieden haben, dass "Objekte unwiderruflich verworfen werden" ( gesammelter Müll ), die sich der Kontrolle des Anwendungsprogrammierers entziehen ("wir sollten uns niemals verlassen"), wurde dies in einer Antwort auf "related " erläutert frage :
Automatische Speicherbereinigung ... beseitigt ganze Klassen von Programmierfehlern, die C- und C ++ - Programmierer stören. Sie können Java-Code mit der Gewissheit entwickeln, dass das System viele Fehler schnell findet und größere Probleme erst nach Auslieferung des Produktionscodes behoben werden.
Das obige Zitat stammt wiederum aus der offiziellen Dokumentation über Java-Entwurfsziele , dh es kann als maßgebliche Referenz angesehen werden, die erklärt, warum sich Java-Sprachdesigner für diesen Weg entschieden haben.
Eine ausführlichere und sprachunabhängigere Beschreibung dieser Einstellung finden Sie in OOSC, Abschnitt 9.6, Automatische Speicherverwaltung . Dieser Abschnitt beginnt mit einer eindeutigen Aussage:
Eine gute OO-Umgebung sollte einen automatischen Speicherverwaltungsmechanismus bieten, mit dem nicht erreichbare Objekte erkannt und wiederhergestellt werden können, sodass sich Anwendungsentwickler auf die Entwicklung ihrer Jobanwendungen konzentrieren können.
Die vorangegangene Diskussion sollte ausreichen, um zu zeigen, wie wichtig es ist, eine solche Einrichtung zur Verfügung zu haben. Mit den Worten von Michael Schweitzer und Lambert Strether:
Ein objektorientiertes Programm ohne automatische Speicherverwaltung ist in etwa das gleiche wie ein Schnellkochtopf ohne Sicherheitsventil: Früher oder später wird das Ding sicher in die Luft jagen!