Sobes.tech
Junior

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

sobes.tech AI

Răspuns de la AI

Cuvântul cheie final este utilizat pentru a restricționa modificarea.

  • Pentru variabile: valoarea variabilei nu poate fi schimbată după inițializare.
  • Pentru metode: metoda nu poate fi suprascrisă într-o subclasă.
  • Pentru clase: clasa nu poate fi moștenită.

Metoda finalize() este o metodă a clasei Object, care este apelată de colectorul de gunoi chiar înainte de a elimina obiectul din memorie, oferind ultima oportunitate de a efectua operațiuni de curățare a resurselor. Nu există garanții că această metodă va fi apelată.

// Exemplu de utilizare a final
final int CONSTANT_VALUE = 100;
// CONSTANT_VALUE = 200; // Eroare de compilare

class BaseClass {
    final void finalMethod() {
        // Corpul metodei
    }
}

class DerivedClass extends BaseClass {
    // @Override
    // void finalMethod() { // Eroare de compilare, metodă finală
    //     // Corpul metodei
    // }
}

final class FinalClass {
    // Corpul clasei
}

// class AnotherClass extends FinalClass { // Eroare de compilare, nu se poate moșteni de la o clasă finală
//     // Corpul clasei
// }
// Exemplu de utilizare a finalize
class Resource heavyResource; // Se presupune o resursă

class MyObject {
    public MyObject() {
        heavyResource = new Resource(); // Inițializarea resursei
    }

    @Override
    protected void finalize() throws Throwable {
        try {
            // Curățarea resursei înainte de eliminarea obiectului
            if (heavyResource != null) {
                heavyResource.release();
            }
        } finally {
            super.finalize(); // Este important să apelăm finalize din clasa părinte
        }
    }
}

Diferențe:

Caracteristică final finalize()
Scop Limitarea modificării (imutaibilitate, interzicerea suprascrierii/mostenirii) Curățarea resurselor înainte ca obiectul să fie eliminat de colectorul de gunoi
Aplicabil la Variabile, metode, clase Metoda clasei Object
Este apelată Nu este apelată, este un modificator Este apelată de colectorul de gunoi (fără garanție)
Cuvânt cheie Da Nu, este o metodă obișnuită