Sobes.tech
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.