Разница между final, finally и finalize в Java

В этом руководстве по 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.

Прокрутить вверх