Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
24 Апр 2023
2 мин
3052

Ключевое слово «final» в Java: как это работает?

Типичная проблема, с которой сталкиваются новички в Java — понимание работы ключевого слова final. В Java это ключевое слово используется для того, чтобы

Типичная проблема, с которой сталкиваются новички в Java — понимание работы ключевого слова final. В Java это ключевое слово используется для того, чтобы указать, что значение переменной не должно меняться. Но есть нюансы, которые могут запутать новичка. Рассмотрим пример.

import java.util.ArrayList;
import java.util.List;

class Test {
  private final List foo;

  public Test()
  {
      foo = new ArrayList();
      foo.add("foo");
  }
  public static void main(String[] args) 
  {
      Test t = new Test();
      t.foo.add("bar");
      System.out.println("print - " + t.foo);
  }
}

В этом коде используется ключевое слово final для переменной foo. И, несмотря на это, в конструкторе класса и в main методе к этому списку добавляются элементы. Код работает и не вызывает ошибок компиляции.

Теперь давайте попробуем изменить переменную на static:

private static final List foo;

И в этом случае мы увидим ошибку компиляции. Почему так происходит? Как на самом деле работает final?

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

Когда мы объявляем переменную как static final, она становится константой. Это означает, что ссылка на объект не может быть изменена, и значение должно быть присвоено при объявлении или в статическом блоке инициализации. После этого значение не может быть изменено.

В обоих случаях важно понимать, что final не делает объекты неизменяемыми. Он просто гарантирует, что ссылка, сохраненная в final переменной, останется постоянной.

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей

Добавить комментарий