Sobes.tech
Junior

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

sobes.tech AI

Atbilde no AI

Atslēgvārds final tiek izmantots, lai ierobežotu modifikāciju:

  • Mainīgajiem: mainīgā vērtība nevar tikt mainīta pēc inicializācijas.
  • Metodēm: metodi nevar pārrakstīt apakšklasē.
  • Klasēm: klasi nevar manto.

Metode finalize() ir Object klases metode, kas tiek izsaukta atkritumu savācējs tieši pirms objekta dzēšanas no atmiņas, dodot pēdējo iespēju notīrīt resursus. Šīs metodes izsaukšana nav garantēta:

// Piemērs `final` lietošanai
final int CONSTANT_VALUE = 100;
// CONSTANT_VALUE = 200; // Kompilācijas kļūda

class BaseClass {
    final void finalMethod() {
        // Metodes saturs
    }
}

class DerivedClass extends BaseClass {
    // @Override
    // void finalMethod() { // Kompilācijas kļūda, `final` metode
    //     // Metodes saturs
    // }
}

final class FinalClass {
    // Klases saturs
}

// class AnotherClass extends FinalClass { // Kompilācijas kļūda, nevar manto `final` klasi
//     // Klases saturs
// }
// Piemērs `finalize`
class Resource heavyResource; // Resurss

class MyObject {
    public MyObject() {
        heavyResource = new Resource(); // Resursa inicializācija
    }

    @Override
    protected void finalize() throws Throwable {
        try {
            // Resursa tīrīšana pirms objekta dzēšanas
            if (heavyResource != null) {
                heavyResource.release();
            }
        } finally {
            super.finalize(); // Svarīgi izsaukt vecā `finalize`
        }
    }
}

Atšķirības:

Īpašība final finalize()
Mērķis Modifikācijas ierobežojums (neizmaināmība, pārrakstīšanas/mantošanas aizliegums) Resursu tīrīšana pirms objekta dzēšanas atkritumu savācējs
Pielietojums Mainīgajiem, metodēm, klasēm Object klases metode
Izsaukšana Nekad, tas ir modifikators Izsauc atkritumu savācējs (bez garantijas)
Atslēgvārds Nē, tas ir parasts metode