Назначение: Модификатор, применяемый к классам, методам и переменным
Особенности:
final переменная: нельзя изменить значение после инициализации
final int MAX_VALUE = 100;
// MAX_VALUE = 200; // Ошибка компиляции
final метод: нельзя переопределить в подклассах
class Parent {
final void show() { System.out.println("Parent"); }
}
class Child extends Parent {
// void show() { } // Ошибка компиляции
}
final класс: нельзя наследовать
final class MyFinalClass { }
// class SubClass extends MyFinalClass { } // Ошибка
Назначение: Блок в конструкции try-catch-finally для гарантированного выполнения кода
Особенности:
try {
// Код, который может вызвать исключение
} catch (Exception e) {
// Обработка исключения
} finally {
// Этот код выполнится в любом случае
System.out.println("Cleanup resources");
}
Важно: finally не сработает только если:
Назначение: Метод класса Object, вызываемый сборщиком мусора перед удалением объекта
Особенности:
class MyClass {
@Override
protected void finalize() throws Throwable {
try {
// Освобождение ресурсов
} finally {
super.finalize();
}
}
}
Проблемы:
Критерий | final | finally | finalize() |
---|---|---|---|
Тип | Ключевое слово | Блок кода | Метод |
Когда работает | Компиляция | Выполнение | Сборка мусора |
Надежность | Гарантировано | Гарантировано* | Не гарантировано |
Использование | Часто | Часто | Избегать |
Совет: Для работы с ресурсами вместо finalize() используйте: