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 |