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 |