// 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()
рекомендуется отказаться в пользу более предсказуемых альтернатив.