Интервьюер: В чем разница между final, finally и finalize?

интервью Java задняя часть
Интервьюер: В чем разница между final, finally и finalize?

Это 6-й день моего участия в ноябрьском испытании обновлений.Подробности о событии:Вызов последнего обновления 2021 г.

Важное примечание: эта статья является одной из серии статей блоггера «Избранные вопросы для интервью — основы», ознакомьтесь с серией статей об интервью.пожалуйста следуйте за мной. Адрес с открытым исходным кодом Gitee:git ee.com/oppo/inter V…

Сложность темы: низкая

Общая степень: высокая

1.заключительное введение

final — это ключевое слово в языке Java, объект, украшенный final, не может изменять или заменять исходное значение или определение. ​

Final можно использовать для изменения: классов, методов, переменных и параметров, которые можно использовать для изменения элемента «parameter», о котором легко забыть Это четыре варианта использования final. ​

1.1 окончательные инструкции по использованию

  • Когда класс окончательно изменен, этот класс не может быть унаследован, что означает, что этот класс спроектирован идеально и не нуждается в изменении и расширении.
  • Когда метод завершен, этот метод не позволяет ни одному классу, наследующему от этого класса, переопределить этот метод, указывая на то, что функция, предоставляемая этим методом, уже соответствует текущим требованиям и не нуждается в расширении.
  • Когда final изменяет переменную, это означает, что переменная не может быть изменена после ее инициализации.
  • Когда параметр изменяется с помощью final, это означает, что параметр не может быть изменен во всем методе.

1.2 дисплей окончательного использования

окончательный украшенный класс:

final class Animal {

}

окончательный модифицированный метод:

public class FinalExample {
    public final void sayHi() {
        System.out.println("Hi~");
    }
}

окончательная измененная переменная:

public class FinalExample {
    private static final String MSG = "hello";
	//......
}

окончательные измененные параметры:

public class FinalExample {
    public void sayHi(final String name) {
        System.out.println("Hi," + name);
    }
}

2. Наконец введение

Наконец, в Java есть механизм, гарантирующий выполнение ключевого кода. ​

Мы можем использовать try-finally или try-catch-finally, чтобы выполнять такие действия, как закрытие JDBC-соединений, блокировка гарантированного освобождения и т. д.

2.1, наконец, отображение использования

try {
    // do something
} finally {
    // 一定会执行的代码
}

2.2 наконец расширение

Иногда в интервью будут спрашивать: наконец-то казнят? Это вопрос с подозрением на побуждение.При нормальных обстоятельствах finally будет выполнен, но есть особый случай, когда finally не будет выполнен.Специальный код реализации и результаты выполнения следующие:image.png

3.Введение в доработку

finalize — это базовый метод в классе Object. Цель его разработки — гарантировать, что объект завершает освобождение определенных ресурсов перед сборкой мусора, но в JDK 9 он был помечен как устаревший метод (deprecated).

Метод finalize не рекомендуется использовать в реальной разработке, хотя он и создан, он не может гарантировать, что метод finalize будет выполнен, поэтому не полагайтесь на него для освобождения каких-либо ресурсов, потому что его выполнение крайне нестабильно. Отказ от поддержки в JDK 9 также является хорошим примером этого момента. ​

окончательно решить проблемы с производительностью

В дополнение к «нестабильному» выполнению finalize есть определенные проблемы с производительностью. ​

Поскольку выполнение finalize связано со сборкой мусора, реализация непустого метода finalize приведет к замедлению восстановления соответствующего объекта на порядок. помедленнее. ​

Поскольку finalize предназначен для вызова перед сборкой мусора, это означает, что объект, реализующий метод finalize, является «особым гражданином», и JVM должна иметь с ним дело дополнительно. finalize по сути становится блокировщиком для быстрой сборки, что может привести к тому, что ваши объекты будут проходить несколько циклов сборки мусора, прежде чем будут собраны.

Суммировать

final, final и finalize с точки зрения буквального английского языка кажутся очень похожими, на самом деле эти три не имеют ничего общего с Java. final - это ключевое слово, используемое для изменения классов, методов, переменных и параметров. Объекты, измененные с помощью final, не могут изменять или заменять свои исходные значения или определения, finally - это механизм в Java, гарантирующий, что ключевой код должен быть выполнен; finalize — это базовый метод в классе Object. Цель его разработки — гарантировать, что объект завершает переработку определенных ресурсов перед сборкой мусора, но его выполнение «нестабильно» и имеет определенные проблемы с производительностью. Для него установлено значение JDK 9. , Устаревший метод.

Ссылки и благодарности

«Эссе интервью с Java Core Technology»