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ă |