// final переменная - константа
final int MAX_COUNT = 100;
// final метод - нельзя переопределить
public final void criticalMethod() {}
// final класс - нельзя наследовать
public final class SecureClass {}
Аналогами являются:
val вместо final переменныхfinal в классах/методах (по умолчанию все классы и методы в Kotlin final)// Эквивалент final в Kotlin
val pi = 3.14 // final переменная
open class Parent {
open fun overridable() {}
fun nonOverridable() {} // final по умолчанию
}
Зачем нужно:
Используется в try-catch блоках:
try {
// Код, который может выбросить исключение
openFile();
} catch (IOException e) {
// Обработка ошибки
logError(e);
} finally {
// Выполнится ВСЕГДА
closeResources();
}
Особенности:
use для автозакрытия ресурсовFile("data.txt").bufferedReader().use { reader ->
// Автоматически закроется после блока
println(reader.readText())
}
Что это было: Метод, который вызывался перед удалением объекта сборщиком мусора.
@Override
protected void finalize() throws Throwable {
try {
releaseResources();
} finally {
super.finalize();
}
}
Проблемы:
Современные альтернативы:
AutoCloseable + try-with-resources (Java) или use (Kotlin)PhantomReference + ReferenceQueue| Ключевое слово | Область применения | Когда выполняется | Современная альтернатива |
|---|---|---|---|
final | Классы/методы/переменные | Во время компиляции | В Kotlin: val, default final |
finally | Обработка исключений | После try/catch | use в Kotlin |
finalize() | Сборка мусора | Неопределенно (до удаления объекта) | AutoCloseable, Cleaner |
final - инструмент проектирования для создания надежных APIfinally - важный механизм управления ресурсамиfinalize() - устаревший подход, который не следует использовать в новых проектахВ современной Android-разработке следует активно использовать final/val для иммутабельности и finally/use для работы с ресурсами, а от finalize() рекомендуется отказаться в пользу более предсказуемых альтернатив.