Ich habe viele Fragen von Anfängern in Java zu finalize()
durchgelesen und finde es irgendwie verwirrend, dass niemand wirklich klargestellt hat, dass finalize() kein zuverlässiger Weg ist, Ressourcen aufzuräumen. Ich habe gesehen, wie jemand kommentiert hat, dass sie es verwenden, um Verbindungen zu bereinigen, was wirklich beängstigend ist, da der einzige Weg, um so nah wie möglich an eine Garantie zu kommen, dass eine Verbindung geschlossen ist, ist, try (catch) finally zu implementieren.
Ich wurde nicht in Informatik ausgebildet, aber ich programmiere seit fast einem Jahrzehnt professionell in Java und ich habe noch nie jemanden gesehen, der finalize()
in einem Produktionssystem implementiert hat. Das bedeutet immer noch nicht, dass es keine Verwendung hat, oder dass die Leute, mit denen ich gearbeitet habe, es richtig gemacht haben.
Also frage ich mich, welche Anwendungsfälle es für die Implementierung von finalize()
gibt, die nicht zuverlässiger über einen anderen Prozess oder eine andere Syntax innerhalb der Sprache behandelt werden können?
Bitte geben Sie spezifische Szenarien oder Ihre Erfahrung an, einfach das Java-Lehrbuch zu wiederholen oder die beabsichtigte Verwendung von finalize reicht nicht aus, da dies nicht der Zweck dieser Frage ist.
0 Stimmen
HI finalize () Methode sehr gut hier erklärt howtodoinjava.com/2012/10/31/…
5 Stimmen
Die meisten Anwendungs- und Bibliothekscodes werden
finalize()
niemals verwenden. Allerdings tut Plattformbibliothekcode, wie z.B.SocketInputStream
, der native Ressourcen im Namen des Aufrufers verwaltet, dies, um das Risiko von Ressourcenlecks zu minimieren (oder verwendet äquivalente Mechanismen wiePhantomReference
, die später hinzugefügt wurden). Daher werden sie im Ökosystem benötigt, obwohl 99,9999% der Entwickler niemals einen schreiben werden.4 Stimmen
Aktualisierung:
finalize
ist ab Java 9 veraltet. Siehe die Frage, Warum ist die finalize() Methode in Java 9 veraltet?.