final, finally, finalize — но смысл у них совершенно разный. Разберёмся 🧠🔒
finalКлючевое слово. Используется для ограничений:
*
final class — нельзя наследовать.*
final method — нельзя переопределить.*
final variable — нельзя изменить значение (один раз присвоил — всё).📌 Особенно важно для immutability и thread-safety.
final int x = 10;
x = 20; // ошибка компиляции
🧯
finallyБлок в конструкции
try-catch-finally. Выполняется всегда, даже если был return или exception.💡 Используется для освобождения ресурсов: закрытия потоков, соединений и т.д.
try {
// что-то может выбросить исключение
} catch (Exception e) {
// обработка ошибки
} finally {
// всегда выполнится
}
⚰️
finalize()Метод из
Object, вызывался перед удалением объекта сборщиком мусора.⚠️ УСТАРЕЛ с Java 9, удалён в Java 18. Не используй.
🔪 Непредсказуем, плохо работает, тормозит GC. Вместо него —
AutoCloseable и try-with-resources.
@Override
protected void finalize() throws Throwable {
System.out.println("До свидания...");
}
🧠 Важно не путать:
*
final — про нельзя менять*
finally — про всегда выполнится*
finalize — про устаревший и бесполезный метод📲 Мы в MAX
👉@BookJava
