Mediumfinalfinally

Что такое final, finally и finalize?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

final — модификатор (переменная/поле — одно присваивание, метод — нельзя переопределить, класс — нельзя наследовать). finally — блок после try/catch, выполняется всегда (для очистки ресурсов). finalize() — метод Object, вызывался GC перед уничтожением (deprecated с Java 9, удалён в Java 18).

public final class Config {            // final класс — нельзя наследовать
    private final int timeout;          // final поле — immutable

    public Config(int timeout) {
        this.timeout = timeout;
    }

    public final void reload() { /* final метод — без override */ }
}
  • Ресурсы освобождать через try-with-resources (AutoCloseable), не finalize;
  • JIT лучше оптимизирует final поля (immutable, safe publication);
  • final классы: String, Integer, все wrapper'ы.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.