Sobes.tech
Junior

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

sobes.tech AI

Odpoveď od AI

Kľúčové slovo final sa používa na obmedzenie modifikácie.

  • Pre premenné: hodnota premennej nemôže byť zmenená po inicializácii.
  • Pre metódy: metóda nemôže byť prepísaná v podtriede.
  • Pre triedy: trieda nemôže byť zdedená.

Metóda finalize() je metóda triedy Object, ktorá je volaná garbage collectorom tesne pred odstránením objektu z pamäte, poskytujúc poslednú možnosť na vykonanie operácií čistenia zdrojov. Nie je žiadna záruka, že táto metóda bude volaná.

// Príklad použitia final
final int CONSTANT_VALUE = 100;
// CONSTANT_VALUE = 200; // Chyba kompilácie

class BaseClass {
    final void finalMethod() {
        // Telo metódy
    }
}

class DerivedClass extends BaseClass {
    // @Override
    // void finalMethod() { // Chyba kompilácie, final metóda
    //     // Telo metódy
    // }
}

final class FinalClass {
    // Telo triedy
}

// class AnotherClass extends FinalClass { // Chyba kompilácie, nemôže dediť od finalnej triedy
//     // Telo triedy
// }
// Príklad použitia finalize
class Resource heavyResource; // Predpokladá sa nejaký zdroj

class MyObject {
    public MyObject() {
        heavyResource = new Resource(); // Inicializácia zdroja
    }

    @Override
    protected void finalize() throws Throwable {
        try {
            // Vyčistenie zdroja pred odstránením objektu
            if (heavyResource != null) {
                heavyResource.release();
            }
        } finally {
            super.finalize(); // Je dôležité volať super.finalize()
        }
    }
}

Rozdiely:

Vlastnosť final finalize()
Cieľ Obmedziť modifikáciu (nepremeniteľnosť, zákaz prepisovania/dedičstva) Vyčistenie zdrojov pred odstránením objektu garbage collectorom
Použiteľné na Premenné, metódy, triedy Metóda triedy Object
Je volaná Nie je volaná, je to modifikátor Je volaná od garbage collectora (bez záruky)
Kľúčové slovo Áno Nie, je to obyčajná metóda