Junior
Что такое ключевое слово final и метод finalize в Java, и в чем их отличие?
sobes.tech AI
Отговор от AI
Ключовата дума final се използва за ограничаване на модификацията.
- За променливи: стойността на променливата не може да бъде променена след инициализация.
- За методи: методът не може да бъде презаписан в подклас.
- За класове: класът не може да бъде наследен.
Методът finalize() е метод на класа Object, който се извиква от събирача на боклука непосредствено преди изтриването на обекта от паметта, предоставяйки последната възможност за изпълнение на операции по почистване на ресурси. Няма гаранция, че този метод ще бъде извикан.
// Пример за използване на final
final int CONSTANT_VALUE = 100;
// CONSTANT_VALUE = 200; // Грешка при компилация
class BaseClass {
final void finalMethod() {
// Тяло на метода
}
}
class DerivedClass extends BaseClass {
// @Override
// void finalMethod() { // Грешка при компилация, финален метод
// // Тяло на метода
// }
}
final class FinalClass {
// Тяло на класа
}
// class AnotherClass extends FinalClass { // Грешка при компилация, не може да наследява финален клас
// // Тяло на класа
// }
// Пример за използване на finalize
class Resource heavyResource; // Предполага се, че е ресурс
class MyObject {
public MyObject() {
heavyResource = new Resource(); // Инициализация на ресурса
}
@Override
protected void finalize() throws Throwable {
try {
// Почистване на ресурса преди изтриване на обекта
if (heavyResource != null) {
heavyResource.release();
}
} finally {
super.finalize(); // Важно е да се извика super.finalize()
}
}
}
Разлики:
| Характеристика | final | finalize() |
|---|---|---|
| Цел | Ограничаване на модификацията (непроменяемост, забрана за презаписване/наследяване) | Почистване на ресурси преди обектът да бъде премахнат от събирача на боклука |
| Прилага се към | Променливи, методи, класове | Метод на класа Object |
| Извиква се | Не се извиква, това е модификатор | Извиква се от събирача на боклука (без гаранция) |
| Ключова дума | Да | Не, това е обикновен метод |