Sobes.tech
Junior

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

sobes.tech KI

Antwort von AI

Das Schlüsselwort final wird verwendet, um die Modifikation einzuschränken.

  • Für Variablen: Der Wert der Variablen kann nach der Initialisierung nicht geändert werden.
  • Für Methoden: Die Methode kann in einer Unterklasse nicht überschrieben werden.
  • Für Klassen: Die Klasse kann nicht vererbt werden.

Die Methode finalize() ist eine Methode der Klasse Object, die vom Müllsammler unmittelbar vor der Entfernung des Objekts aus dem Speicher aufgerufen wird, um die letzte Gelegenheit zur Bereinigung von Ressourcen zu bieten. Es gibt keine Garantie, dass diese Methode aufgerufen wird.

// Beispiel für die Verwendung von final
final int CONSTANT_VALUE = 100;
// CONSTANT_VALUE = 200; // Kompilierungsfehler

class BaseClass {
    final void finalMethod() {
        // Methodenkörper
    }
}

class DerivedClass extends BaseClass {
    // @Override
    // void finalMethod() { // Kompilierungsfehler, Methode final
    //     // Methodenkörper
    // }
}

final class FinalClass {
    // Klassentext
}

// class AnotherClass extends FinalClass { // Kompilierungsfehler, kann nicht von finaler Klasse erben
//     // Klassentext
// }
// Beispiel für die Verwendung von finalize
class Resource heavyResource; // Es wird eine Ressource angenommen

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

    @Override
    protected void finalize() throws Throwable {
        try {
            // Ressource vor der Entfernung des Objekts bereinigen
            if (heavyResource != null) {
                heavyResource.release();
            }
        } finally {
            super.finalize(); // Es ist wichtig, finalize der Elternklasse aufzurufen
        }
    }
}

Unterschiede:

Merkmal final finalize()
Zweck Modifikation einschränken (Unveränderlichkeit, Verbot des Überschreibens/Vererbens) Ressourcenbereinigung vor der Entfernung des Objekts durch den Müllsammler
Gilt für Variablen, Methoden, Klassen Methode der Klasse Object
Wird aufgerufen Wird nicht aufgerufen, ist ein Modifikator Wird vom Müllsammler aufgerufen (ohne Garantie)
Schlüsselwort Ja Nein, es ist eine gewöhnliche Methode