Ещё интересный момент отсюда: Интуит
Запрещается использовать поле в инициализации других полей до его объявления.
int y=x; //так нельзя
int x=3;
Однако, в остальном поля можно объявлять и ниже их использования:
class Point {
int getX() {return x;}
int y=getX();
int x=3;
}
public static void main (String s[]) {
Point p=new Point();
System.out.println(p.x+", "+p.y);
}
Результатом будет:
3, 0
Данный пример корректен, но для понимания его результата необходимо вспомнить, что все поля класса имеют значение по умолчанию:
для числовых полей примитивных типов – 0 ;
для булевского типа – false ;
для ссылочных – null.
Таким образом, при инициализации переменной y был использован результат метода getX(), который вернул значение по умолчанию переменной x, то есть 0. Затем переменная x получила значение 3.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ