Главная » Java » Переменные final в Java

0

Модификатор final свидетельствует, что значение переменной задается только ин раз и далее изменяться не может – оно приобретает свойство устойчивости. Признаком final разрешается помечать любые поля, локальные переменные и параметры. Переменные final должны быть инициализированы до момента их первоиспользования. Обычно это делается непосредственно в конструкции объявления:

final int id = nextID++;

Инициализация поля или локальной переменной final может быть и отложена. Подобные поля/переменные final, не инициализированные в выражении объявления, принято обозначать термином blank final. Поле blank final должно инициализироваться в соответствующем блоке инициализации или в теле конструктора (если речь идет о поле экземпляра), а локальные переменные blank

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

применение полей blank final оправданно и полезно в тех случаях, когда их

значениЯ определяются аргументами конструктора, как в примере

class Nameobj {

final String name; // blank final

Nameobj(String name) {

this.name = name;

}

}

либо если простого выражения инициализации не достаточно ввиду сложности задачи:

static final int[] numbers = numberList();

static final int maxNumber; // максимальное из чисел

 

static {

int max = numbers[0];

for (int i = 0; i < numbers.1ength; i++)

if (numbers[i] > max)

max = numbers[i];

maxNumber = max;

}

Компилятор проверяет, инициализированы ли все поля statiс final по окончании выполнения кода статических блоков инициализации, а нестатические поля final по завершении процесса конструирования объекта. Если какое-либо из указанных условий не выполняется, компилятор выдает сообщение

об ошибке.

Локальные переменные blank final используются, например, в тех ситуациях,

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

final до момента ее первого использования.

Локальные переменные и параметры обычно объявляются как final только

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

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

Источник: Арнолд, Кен, Гослинг, Джеймс, Холмс, Дэвид. Язык программирования Java. 3-е изд .. : Пер. с англ. – М. : Издательский дом «Вильяме», 2001. – 624 с. : ил. – Парал. тит. англ.

По теме:

  • Комментарии