Sobes.tech
Junior

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

sobes.tech AI

Atsakymas iš AI

Raktas žodis final naudojamas pakeitimų apribojimui:

  • Kintamųjų: kintamojo reikšmė negali būti pakeista po inicializacijos.
  • Metodų: metodas negali būti perrašytas pogrupyje.
  • Klasės: klasė negali būti paveldima.

Metodas finalize() yra Object klasės metodas, kuris kviečiamas šiukšlių surinkėjo prieš ištrindamas objektą iš atminties, suteikdamas paskutinę galimybę išvalyti išteklius. Šio metodo kvietimas nėra garantuotas:

// Pavyzdys `final` naudojimo
final int CONSTANT_VALUE = 100;
// CONSTANT_VALUE = 200; // Klaidų kompiliatorius

class BaseClass {
    final void finalMethod() {
        // Metodų turinys
    }
}

class DerivedClass extends BaseClass {
    // @Override
    // void finalMethod() { // Klaidų kompiliatorius, metodas `final`
    //     // Metodų turinys
    // }
}

final class FinalClass {
    // Klasės turinys
}

// class AnotherClass extends FinalClass { // Klaidų kompiliatorius, negalima paveldėti `final` klasės
//     // Klasės turinys
// }
// Pavyzdys `finalize`
class Resource heavyResource; // Tam tikras išteklius

class MyObject {
    public MyObject() {
        heavyResource = new Resource(); // Išteklių inicializacija
    }

    @Override
    protected void finalize() throws Throwable {
        try {
            // Išteklių valymas prieš objekto ištrynimą
            if (heavyResource != null) {
                heavyResource.release();
            }
        } finally {
            super.finalize(); // Svarbu iškviesti tėvo `finalize`
        }
    }
}

Skirtumai:

Savybė final finalize()
Paskirtis Pakeitimų apribojimas (nepakitumas, perrašymo/ paveldėjimo draudimas) Išteklų valymas prieš objekto ištrynimą šiukšlių surinkėjo
Taikoma Kintamiesiems, metodams, klasėms Object klasės metodui
Kviečiama Niekada, tai modifikatorius Kviečiama šiukšlių surinkėjo (be garantijos)
Raktažodis Taip Ne, tai įprastas metodas