Sobes.tech
Junior

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

sobes.tech AI

Odpověď 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 môž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, nemožno 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()
Účel Obmedziť modifikáciu (nepremeniteľnosť, zákaz prepísania/dedičstva) Vyčistenie zdrojov pred odstránením objektu garbage collectorom
Použiteľné na Premenné, metódy, triedy Metóda triedy Object
Volá sa Nevolá sa, je to modifikátor Volá ho garbage collector (bez záruky)
Kľúčové slovo Áno Nie, je to bežná metóda