Hi,
warum wirft der Compiler für die Klasse E einen Compilerfehler ("illegal forward reference"), für E2 aber nicht? Es ist doch egal wo das Zeug im Code steht, der Compiler schreibt zuerst alle Membervariablendeklerationen in den Code jedes Konstruktors, danach alle Exemplarinitialisierer.Zitat aus der Insel Kapitel 6.5.8:
Der Programmcode der Exemplarinitialisierer wird an den Anfang aller Konstruktoren gesetzt. Objektvariablen wurden schon initialisiert.
Code:
class E{
public static void main(String[] args){
new E();
new E2();}
{
System.out.println(z);
}
S z = new S(1);
}
class E2{
S z2 = new S(1);
{
System.out.println(z2);
}
}
class S{
public S(int i){
System.out.println("new S("+i+")...");
}
}