Философия Java


Данные final


Многие языки программирования имеют пути сообщить компилятору, что данный кусочек данных является неизменным, константой. Константа наиболее удобна для применения в следующих двух случаях:

  1. Она должна быть константой во время компиляции и не может быть изменена никогда.
  2. Она может быть инициализирована во время инициализации и не должна быть изменена после.

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

Поля имеющие модификаторы static и final вообще являются ячейкой для хранения и не могут быть изменены.

При использовании final с объектами, а не с примитивными типами получается несколько не тот эффект. С примитивами, final создает константу значения, а с объектами - ссылку, final создает ссылку - константу. Как только ссылка инициализируется на какой-то объект, она уже не может быть в последствии перенаправлена на другой объект. Однако сам объект может быть модифицирован; Java не предоставляет способа создать объект - константу. (Однако, Вы можете написать свой собственный класс с эффектом константы.) Эти же ограничения накладываются и на массивы, поскольку они тоже объекты.

Ниже представлен пример, демонстрирующий использование полей с модификатором final:

//: c06:FinalData.java

// Эффект полей final.

class Value { int i = 1; }

public class FinalData { // Может быть константой во время компиляции

final int i1 = 9; static final int VAL_TWO = 99; // Обычная public константы:

public static final int VAL_THREE = 39; // Не может быть константой во время компиляции:

final int i4 = (int)(Math.random()*20); static final int i5 = (int)(Math.random()*20);

Value v1 = new Value(); final Value v2 = new Value(); static final Value v3 = new Value(); // Массивы:




Начало  Назад  Вперед



Книжный магазин