Wydaje się intuicyjnie jasne, że w Javie instance variable intitializers są wykonywane w kolejności, w jakiej pojawiają się w deklaracji klasy.Zamawianie inicjalizatorów zmiennych instancji
Z pewnością wydaje się, że tak jest w przypadku JDK, którego używam. Na przykład, następujący:
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();
}
}
wydruki 42 0 42
(innymi słowy, y
podnosi wartość domyślną z
).
Czy to zamówienie jest rzeczywiście gwarantowane? Przeglądałem JLS i nie mogę znaleźć żadnego wyraźnego potwierdzenia.
w czasie, gdy przypisano 'y',' z' nie jest jeszcze inicjowane, dlatego pokazuje '0'. – Raptor
@ShivanRaptor: To jest dokładnie moja intuicja. Pytanie brzmi, czy jest to formalnie określone przez JLS. – NPE