Sobes.tech
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 No, è un metodo normale