В этом руководстве по Java вы подробно узнаете о различиях между final, finally и finalize.
1. Ключевое слово Java final
Ключевое слово final может использоваться с переменными класса, методами или классами. Оно имеет разное значение в зависимости от того, применяется ли оно к переменной, классу или методу.
1.1. окончательные переменные
Переменной, объявленной как final, не может быть присвоено другое значение после ее инициализации. Инициализация переменной final может происходить только в двух местах.
- На момент подачи заявления
- Внутри конструктора
публичный класс MyClass{// Во время декларациипубличная окончательная строка MAJOR_VERSION = "1";публичная окончательная строка MINOR_VERSION;публичный МойКласс(){// в конструктореэта.MINOR_VERSION = "2";}}
После инициализации конечной переменной мы не можем изменить ее значение нигде в программе. Попытка внести изменения приведет к ошибке компиляции – Конечное поле MyClass.VERSION не может быть назначено.
1.2. окончательные методы
Конечный метод не может быть переопределен в дочернем классе.
публичный класс ParentClass{публичный финал void showMyName(){System.out.println("В родительском классе");}}
Попытка переопределить метод showMyName() приведет к ошибке времени компиляции — Невозможно переопределить последний метод из ParentClass.

1.3. финальные занятия
В Java мы не можем наследовать final класс. Ни один класс не может быть подклассом final класса или наследовать его поля и методы.
публичный класс final ParentClass{public void showMyName(){System.out.println("В родительском классе");}}

2. Java окончательно блокируется
Блок Java finally является частью блоков try-catch-finally для обработки исключений. Блок finally гарантированно будет выполнен независимо от того, было ли выброшено исключение из блока try или нет.
В идеале блок finally используется для освобождения ресурсов, используемых в блоке try. Он в основном предназначен для действий по очистке ресурсов, которые помогают экономить память и использование ресурсов.
пытаться {//открыть файл//прочитать файл}поймать(Исключение e) {//обработка исключения при чтении файла}окончательно {//закрыть файл}
Подробнее: Java try catch finally блокирует
3. Метод Java finalize()
JEP-421(Java 18) пометил финализацию как устаревшую и для удаления в будущем выпуске. Сопровождающим библиотекам и приложениям, которые полагаются на финализацию, следует рассмотреть возможность перехода на другие методы управления ресурсами, такие как оператор try-with-resources и очистители.
Метод finalize() — это специальный метод, который вызывается сборщиком мусора для объекта, когда сборщик мусора определяет, что ссылок на объект больше нет. Он определен в классе Object.
защищенный void finalize() бросает Throwable
- Основное назначение метода finalize() — выполнение действий по очистке перед тем, как объект будет безвозвратно удален.
- Если метод finalize() выдает неперехваченное исключение, исключение игнорируется и финализация этого объекта завершается. Приложение не завершается.
- Метод finalize никогда не вызывается виртуальной машиной Java более одного раза для любого заданного объекта.
4. Заключение
Как обсуждалось в предыдущих разделах, final, finally и finalize — это совершенно разные концепции в Java. У них нет ничего общего — за исключением того, что все они являются концепциями, связанными с Java.