Sobes.tech
Junior

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

sobes.tech AI

Vastus AI-lt

Võtmesõna final kasutatakse muutuste piiramiseks:

  • Muutujate jaoks: muutuja väärtust ei saa pärast initsialiseerimist muuta.
  • Meetodite jaoks: meetodit ei saa alamsklassis üle kirjutada.
  • Klasside jaoks: klassi ei saa pärida.

Meetod finalize() on Object klassi meetod, mis kutsutakse prügikoristaja poolt otse enne objekti eemaldamist mälust, andes viimase võimaluse ressursside puhastamiseks. Selle meetodi kutsumine ei ole garanteeritud:

// Näide `final` kasutamisest
final int CONSTANT_VALUE = 100;
// CONSTANT_VALUE = 200; // Kompilatsiooni viga

class BaseClass {
    final void finalMethod() {
        // Meetodi keha
    }
}

class DerivedClass extends BaseClass {
    // @Override
    // void finalMethod() { // Kompilatsiooni viga, meetod on `final`
    //     // Meetodi keha
    // }
}

final class FinalClass {
    // Klas keha
}

// class AnotherClass extends FinalClass { // Kompilatsiooni viga, ei saa pärida `final` klassi
//     // Klas keha
// }
// Näide `finalize()` kasutamisest
class Resource heavyResource; // Ressurss

class MyObject {
    public MyObject() {
        heavyResource = new Resource(); // Ressursi initsialiseerimine
    }

    @Override
    protected void finalize() throws Throwable {
        try {
            // Ressursi puhastamine enne objekti eemaldamist
            if (heavyResource != null) {
                heavyResource.release();
            }
        } finally {
            super.finalize(); // Oluline on kutsuda super.finalize()
        }
    }
}

Erinevused:

Omadus final finalize()
Eesmärk Muutuste piiramine (muutumatuse, üle kirjutamise/pärimise keeld) Ressursside puhastamine enne objekti eemaldamist prügikoristaja poolt
Rakendub Muutujatele, meetoditele, klassidele Object klassi meetodile
Kutsutakse Mitte kunagi, see on modifikaator Kutsutakse prügikoristaja poolt (garantiid ei ole)
Võtmesõna Jah Ei, see on tavaline meetod