Sembra intuitivamente chiaro che in Java, instance variable intitializers vengono eseguiti nell'ordine in cui compaiono nella dichiarazione di classe.Ordinamento di inizializzatori variabili di istanza
Questo sembra essere il caso nel JDK che sto usando. Ad esempio, la seguente:
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();
}
}
stampe 42 0 42
(in altre parole, y
preleva il valore predefinito di z
).
Questo ordine è effettivamente garantito? Ho esaminato il JLS e non ho trovato alcuna conferma esplicita.
al momento in cui 'y' è assegnato,' z' non è ancora inizializzato, quindi mostra '0'. – Raptor
@ShivanRaptor: Questa è esattamente la mia intuizione. La domanda è se questo è formalmente specificato dal JLS. – NPE