Lo scopo di questo metodo è spiegato nella documentazione dell'API come segue:
it is invoked if and when the Java virtual machine has determined that there is no longer any means by which this object can be accessed by any thread that has not yet died, except as a result of an action taken by the finalization of some other object or class which is ready to be finalized...
the usual purpose of finalize
... is to perform cleanup actions before the object is irrevocably discarded. For example, the finalize method for an object that represents an input/output connection might perform explicit I/O transactions to break the connection before the object is permanently discarded...
Se sei anche interessato ai motivi per cui i designer di lingua hanno scelto che "l'oggetto è irrevocabilmente scartato" ( garbage collection ) che va oltre il controllo del programmatore di applicazioni ("non dovremmo mai fare affidamento"), questo è stato spiegato in una risposta alla domanda correlata :
automatic garbage collection... eliminates entire classes of programming errors that bedevil C and C++ programmers. You can develop Java code with confidence that the system will find many errors quickly and that major problems won't lay dormant until after your production code has shipped..
La citazione di sopra, a sua volta, è stata presa dalla documentazione ufficiale sugli obiettivi di progettazione Java , che è può essere considerato un riferimento autorevole che spiega perché i progettisti del linguaggio Java hanno deciso in questo modo.
Per una discussione agnostica più dettagliata e linguistica di questa preferenza, consulta OOSC sezione 9.6 Gestione automatica della memoria (in realtà, non solo questa sezione, ma l'intero capitolo 9 è molto utile da leggere se sei interessato a cose del genere). Questa sezione si apre con una dichiarazione univoca:
A good O-O environment should offer an automatic memory management mechanism
which will detect and reclaim unreachable objects, allowing application developers to
concentrate on their job — application development.
The preceding discussion should suffice to show how important it is to have such a
facility available. In the words of Michael Schweitzer and Lambert Strether:
An object-oriented program without automatic memory management is
roughly the same as a pressure cooker without a safety valve: sooner or later
the thing is sure to blow up!