Sobes.tech
Junior

Что такое ключевое слово final и метод finalize в Java, и в чем их отличие?

sobes.tech IA

Réponse de l'IA

Le mot-clé final est utilisé pour restreindre la modification.

  • Pour les variables : la valeur de la variable ne peut pas être modifiée après l'initialisation.
  • Pour les méthodes : la méthode ne peut pas être redéfinie dans une sous-classe.
  • Pour les classes : la classe ne peut pas être héritée.

La méthode finalize() est une méthode de la classe Object, appelée par le ramasse-miettes juste avant la suppression de l'objet de la mémoire, offrant la dernière opportunité d'effectuer des opérations de nettoyage des ressources. Il n'y a aucune garantie que cette méthode soit appelée.

// Exemple d'utilisation de final
final int CONSTANT_VALUE = 100;
// CONSTANT_VALUE = 200; // Erreur de compilation

class BaseClass {
    final void finalMethod() {
        // Corps de la méthode
    }
}

class DerivedClass extends BaseClass {
    // @Override
    // void finalMethod() { // Erreur de compilation, méthode final
    //     // Corps de la méthode
    // }
}

final class FinalClass {
    // Corps de la classe
}

// class AnotherClass extends FinalClass { // Erreur de compilation, impossible d'hériter d'une classe finale
//     // Corps de la classe
// }
// Exemple d'utilisation de finalize
class Resource heavyResource; // Supposé une ressource

class MyObject {
    public MyObject() {
        heavyResource = new Resource(); // Initialisation de la ressource
    }

    @Override
    protected void finalize() throws Throwable {
        try {
            // Nettoyage de la ressource avant la suppression de l'objet
            if (heavyResource != null) {
                heavyResource.release();
            }
        } finally {
            super.finalize(); // Il est important d'appeler finalize de la classe parente
        }
    }
}

Différences :

Caractéristique final finalize()
But Restreindre la modification (immutabilité, interdiction de redéfinir/hériter) Nettoyage des ressources avant que le ramasse-miettes ne supprime l'objet
Appliqué à Variables, méthodes, classes Méthode de la classe Object
Appelé Non appelé, c'est un modificateur Appelé par le ramasse-miettes (sans garantie)
Mot-clé Oui Non, c'est une méthode ordinaire