Junior
Что такое ключевое слово final и метод finalize в Java, и в чем их отличие?
sobes.tech AI
Risposta dell'AI
La parola chiave final viene utilizzata per limitare la modifica.
- Per le variabili: il valore della variabile non può essere modificato dopo l'inizializzazione.
- Per i metodi: il metodo non può essere sovrascritto in una sottoclasse.
- Per le classi: la classe non può essere ereditata.
Il metodo finalize() è un metodo della classe Object, chiamato dal garbage collector subito prima di rimuovere l'oggetto dalla memoria, offrendo l'ultima possibilità di eseguire operazioni di pulizia delle risorse. Non ci sono garanzie che questo metodo venga chiamato.
// Esempio di utilizzo di final
final int CONSTANT_VALUE = 100;
// CONSTANT_VALUE = 200; // Errore di compilazione
class BaseClass {
final void finalMethod() {
// Corpo del metodo
}
}
class DerivedClass extends BaseClass {
// @Override
// void finalMethod() { // Errore di compilazione, metodo final
// // Corpo del metodo
// }
}
final class FinalClass {
// Corpo della classe
}
// class AnotherClass extends FinalClass { // Errore di compilazione, non si può ereditare da una classe final
// // Corpo della classe
// }
// Esempio di utilizzo di finalize
class Resource heavyResource; // Si presume una risorsa
class MyObject {
public MyObject() {
heavyResource = new Resource(); // Inizializzazione della risorsa
}
@Override
protected void finalize() throws Throwable {
try {
// Pulizia della risorsa prima di rimuovere l'oggetto
if (heavyResource != null) {
heavyResource.release();
}
} finally {
super.finalize(); // È importante chiamare finalize della classe genitore
}
}
}
Differenze:
| Caratteristica | final | finalize() |
|---|---|---|
| Scopo | Limitare la modifica (immutabilità, divieto di sovrascrittura/ereditarietà) | Pulizia delle risorse prima che l'oggetto venga rimosso dal garbage collector |
| Applicato a | Variabili, metodi, classi | Metodo della classe Object |
| Viene chiamato | Non viene chiamato, è un modificatore | Viene chiamato dal garbage collector (senza garanzia) |
| Parola chiave | Sì | No, è un metodo normale |