Sobes.tech
Junior

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

sobes.tech AI

Antwoord van AI

Het sleutelwoord final wordt gebruikt om modificaties te beperken.

  • Voor variabelen: de waarde van de variabele kan niet worden gewijzigd nadat deze is geïnitialiseerd.
  • Voor methoden: de methode kan niet worden overschreven in een subklasse.
  • Voor klassen: de klasse kan niet worden geërfd.

De methode finalize() is een methode van de klasse Object, die wordt aangeroepen door de garbage collector vlak voordat het object uit het geheugen wordt verwijderd, en biedt de laatste mogelijkheid om bronnen op te schonen. Er is geen garantie dat deze methode wordt aangeroepen.

// Voorbeeld van gebruik van final
final int CONSTANT_VALUE = 100;
// CONSTANT_VALUE = 200; // Compileerfout

class BaseClass {
    final void finalMethod() {
        // Method body
    }
}

class DerivedClass extends BaseClass {
    // @Override
    // void finalMethod() { // Compileerfout, final methode
    //     // Method body
    // }
}

final class FinalClass {
    // Class body
}

// class AnotherClass extends FinalClass { // Compileerfout, kan niet erven van een final klasse
//     // Class body
// }
// Voorbeeld van gebruik van finalize
class Resource heavyResource; // Verondersteld een resource

class MyObject {
    public MyObject() {
        heavyResource = new Resource(); // Resource initialiseren
    }

    @Override
    protected void finalize() throws Throwable {
        try {
            // Resource opschonen voordat het object wordt verwijderd
            if (heavyResource != null) {
                heavyResource.release();
            }
        } finally {
            super.finalize(); // Het is belangrijk om finalize van de ouderklasse aan te roepen
        }
    }
}

Verschillen:

Kenmerk final finalize()
Doel Modificatie beperken (onveranderlijkheid, verbod op overschrijven/erfenis) Resources opschonen voordat het object wordt verwijderd door de garbage collector
Toepasbaar op Variabelen, methoden, klassen Methode van de klasse Object
Wordt aangeroepen Wordt niet aangeroepen, het is een modifier Wordt aangeroepen door de garbage collector (geen garantie)
Trefwoord Ja Nee, het is een gewone methode