Назад к вопросам
Junior
68
questionbank
Что такое ключевое слово final и метод finalize в Java, и в чем их отличие?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech 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
// // Тело метода
// }
}
final class FinalClass {
// Тело класса
}
// class AnotherClass extends FinalClass { // Ошибка компиляции, нельзя наследовать final класс
// // Тело класса
// }
// Пример использования 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(); // Важно вызвать finalize родительского класса
}
}
}
Отличия:
| Характеристика | final | finalize() |
|---|---|---|
| Назначение | Ограничение модификации (неизменяемость, запрет переопределения/наследования) | Очистка ресурсов перед удалением объекта сборщиком мусора |
| Применяется к | Переменным, методам, классам | Методу класса Object |
| Вызывается | Не вызывается, это модификатор | Вызывается сборщиком мусора (нет гарантии) |
| Ключевое слово | Да | Нет, это обычный метод |