Middle
Kas yra raktiniai žodžiai final ir finalize Java kalboje ir kuo jie skiriasi?
sobes.tech AI
Atsakymas iš AI
final - raktažodis, žymintis nekintamumą:
- Kintamasis: nuoroda ar reikšmė negali būti pakeista po inicializacijos.
- Metodas: metodas negali būti perrašytas vaikų klasėje.
- Klasė: klasė negali būti paveldėta.
finalize() - metodas, iškviečiamas šiukšlių surinkėjo (Garbage Collector) prieš objektui ištrinant iš atminties. Jis yra Object klasėje ir skirtas išlaisvinti išorinius išteklius.
Palyginimas:
final |
finalize() |
|---|---|
| Raktažodis | Metodas |
| Žymi nekintamumą | Iškviečiamas prieš objekto ištrynimą |
| Susijęs su deklaracija | Susijęs su objekto gyvavimo ciklu |
| Taikomas kintamiesiems, metodams, klasėms | Taikomas tik objektams |
final pavyzdys:
public class FinalExample {
final int finalVariable = 10;
final void finalMethod() {
// nekintamas metodo logika
}
}
final class FinalClass {
// turinys
}
finalize() pavyzdys:
public class FinalizeExample {
@Override
protected void finalize() throws Throwable {
try {
// išorinių išteklių valymas, pvz., ryšio uždarymas
System.out.println("Finalizing FinalizeExample object...");
} finally {
super.finalize(); // visada iškvieskite super.finalize()
}
}
}
Svarbu: finalize() naudojimas šiuolaikinėje Java nerekomenduojamas dėl nenuspėjamo vykdymo laiko ir galimų našumo problemų. Resursų valdymui geriau naudoti try-with-resources blokus.