Кажется интуитивно понятным, что в Java instance variable intitializers выполняются в том порядке, в котором они появляются в объявлении класса.Порядок инициализаторов переменных экземпляра
Это, безусловно, имеет место в JDK, который я использую. Так, например, следующее:
public class Clazz {
int x = 42;
int y = this.z;
int z = this.x;
void print() {
System.out.printf("%d %d %d\n", x, y, z);
}
public static void main(String[] args) {
new Clazz().print();
}
}
отпечатки 42 0 42
(другими словами, y
поднимает значение по умолчанию z
).
Действительно ли этот заказ гарантирован? Я просматривал JLS и не могу найти явного подтверждения.
в момент присвоения 'y',' z' по-прежнему не инициализирован, поэтому отображается '0'. – Raptor
@ShivanRaptor: Это именно моя интуиция. Вопрос в том, формально ли это определено JLS. – NPE