Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие Java .pdf
Скачиваний:
118
Добавлен:
16.03.2015
Размер:
1.32 Mб
Скачать

Т.н. поля-константы (неизменяемые значения, хранящиеся в контексте класса) именуются только большими буквами, для разделения слов используется подчеркивание (например, PI,

SIZE_MIN, SIZE_MAX).

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

1.9 Понятие модуля компиляции

Модуль компиляции хранится в файле с расширением java и является единичной порцией входных данных для компилятора. Состоит из:

объявления пакета (package MyPackage;);

выражений импортирования (import java.util.List; import java.util.*;);

объявлений верхнего уровня (классов и интерфейсов).

1.10 Поля

Переменные, объявленные в классе, называют полями (fields). Примером поля может служить переменная name класса Body, рассмотренного выше. Объявление поля состоит из модификаторов, наименования типа переменной, за которым следует её идентификатор и необязательная конструкция инициализации, позволяющая присвоить переменной некое исходное значение.

В примере 1 каждый объект класса Body обладает собственными копиями трех полей: типа long для хранения уникального номера, позволяющего различить объект среди ему подобных, типа String, содержащего ссылку на строку имени объекта, и типа Body, ссылающегося на другой объект того же типа, который представляет небесное тело, вокруг которого обращается текущее. Объект (экзем-

28

пляр) класса обладает «личными» копиями полей, т.е. собственным

– в общем случае, уникальным – состоянием. Поля объекта также называют переменными экземпляра. Например, изменение содержимого поля orbits, принадлежащего одному из объектов Body, не воздействует на одноименные поля других объектов того же типа.

Вконструкции объявления поля разрешено использовать дополнительные модификаторы, задающие определенные свойства поля:

модификаторы доступа (будут рассмотрены ниже),

static,

final,

transient – относится к проблеме сериализации (представления объекта в виде последовательности байтов данных) и будет рассмотрен в следующих пособиях,

volatile – связан с вопросами синхронизации потоков вычислений

иуправления памятью, будет рассмотрен в следующих пособиях.

Вобъявлении поля одновременно не могут использоваться

модификаторы final и volatile.

Поле может быть инициализировано в конструкции объявления с помощью оператора присваивания и значения соответствующего типа. В примере класса Body поле nextID инициализируется нолем. В качестве выражения инициализации допускается применять не только константы, но и имена других полей, конструкции вызова методов или более сложные выражения, состоящие из всех названных элементов вместе. Требуется, чтобы тип выражения инициализации совпадал с типом поля; кроме того, если в выражении используется вызов метода, тот не должен генерировать объявляемые исключения, поскольку в данном случае их «некому» будет отловить и обработать. Ниже приведены примеры допустимых выражений инициализации.

Пример 5. Объявление и инициализация полей double zero = 0.0;

double zeroCopy = zero; double rootTwo = Math.sqrt(2);

29

Если поле явно не инициализировано, ему присваивается значение соответствующего типа, принятое по умолчанию (см. таблицу 1).

Таблица 1. Значения типов по умолчанию

Тип

Значение по умолчанию

boolean

false

char

\u0000

byte

0

short

0

int

0

long

0

float

0.0f

double

0.0

Ссылочные типы

null

Всоответствии с принятым соглашением null выражает тот факт, что объект еще не создан или создан неправильно.

Иногда требуется, чтобы существовала единственная копия поля, общая для всех объектов класса. С этой целью в объявление поля вводится модификатор static (такие поля называют статическими полями или переменными класса). Статическое поле находится в пределах класса в единственном экземпляре, независимо от того, сколько объектовкласса было создано и создавались ли таковые вообще.

Впримере 1 класса Body объявлено одно статическое поле, nextID, предназначенное для хранения очередного доступного для использования порядкового номера объекта. Далее мы увидим, что

вкаждом создаваемом объекте класса Body переменной idNum будет присваиваться текущее содержимое nextID с последующим увеличением значения nextID на единицу. Для создания объектов Body и ведения учета их порядковых номеров вполне достаточно одного экземпляра переменной nextID.

Вконтексте «родного» класса к значению статического поля можно обращаться напрямую, но если необходимо обратиться

30

к нему извне, перед идентификатором поля следует указать не ссылку на объект, а имя класса. Например, значение nextID может быть выведено на экран следующим образом:

System.out.println(Body.nextID);

Собственно говоря, для иллюстрации возможностей доступа к статическим полям вполне подходит и поле out класса System.

Для обращения к статическому члену класса разрешено также пользоваться ссылкой на объект этого класса:

System.out.println(mercury.nextID);

Такой возможностью, однако, не следует злоупотреблять, поскольку в подобном случае создается ложное впечатление, что переменная nextID является полем объекта mercury, а не членом класса Body в целом. При обращении к статическому члену посредством ссылки на объект компилятор определяет имя соответствующего класса, а значением ссылки как таковой может быть даже null.

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

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

Если поле, помеченное как final, лишено инициализатора, его принято называть blank final. Наличие возможности подобного объявления полезно в тех случаях, когда для инициализации поля простого выражения недостаточно. Поле final должно быть инициали-

31

Соседние файлы в предмете Программирование на Java