Объявление полей начинается с перечисления модификаторов. Возможно применение любого из трех модификаторов доступа, либо никакого вовсе, что означает уровень доступа по умолчанию.
Поле может быть объявлено как final, это означает, что оно инициализируется один раз и больше не будет менять своего значения. Простейший способ работы с final-переменными - инициализация при объявлении:
final double PN3.1415;
Также допускается инициализация final-полей в конце каждого конструктора класса.
Не обязательно использовать для инициализации константы компиляции, возможно обращение к различным функциям, например:
final long creationTime=System.currentTimeMillis();
Данное поле будет хранить время создания объекта. Существует еще два специальных модификатора - transient и volatile. Они будут рассмотрены в соответствующих лекциях.
После списка модификаторов указывается тип поля. Затем идет перечисление одного или нескольких имен полей с возможными инициализаторами:
inta;
int b=3, c=b+5, d;
Point p, p1=null, p2==newPoint();
Повторяющиеся имена полей запрещены. Указанный идентификатор при объявлении становится простым именем поля. Составное имя формируется из имени класса или имени переменной объектного типа, и простого имени поля. Областью видимости поля является все объявление хела класса.
Запрещается использовать поле в инициализации других полей до его объявления.
int у=х; intx=3;
Однако в остальном поля можно объявлять и ниже их использования:
class Point {
intgetXO {return х;}
inty=getX(); int x=3;
public static void main (String s[]) {
Point p=newPoint{);
System.out.println(p.x+", "+p.y); } }
Результатом будет:
3,0
Данный пример корректен, но для понимания его результата необходимо вспомнить, что все поля класса имеют значение по умолчанию:
• для числовых полей примитивных типов - 0;
• для булевского типа - false;
• для ссылочных — null
Таким образом, при инициализации переменной у был использован результат метода getX(), который вернул значение по умолчанию переменной X, то есть 0. Затем переменная х получила значение 3.