Kann jemand erklären, was mit diesem Code falsch ist:
%Vor%Wenn ich LINE 1 kommentiere - alles ist OK und Base.main-Methode druckt "1". Wenn LINE 1 - nicht kommentiert ist, wurde der Kompilierzeitfehler "illegal forward reference" angezeigt. Also, wie ich im statischen Init-Block verstehe, kann ich Wert für i setzen, aber nicht lesen. Könnte jemand erklären warum?
Dies liegt an den Einschränkungen für die Verwendung von Feldern während der Initialisierung . Insbesondere kann die Verwendung statischer Felder innerhalb eines statischen Initialisierungsblocks vor der Zeile, auf der sie deklariert sind, nur auf der linken Seite eines Ausdrucks (dh einer Zuweisung) liegen, sofern sie nicht vollständig qualifiziert sind (in Ihrem Fall Base.i
).
Also zum Beispiel: wenn Sie int j = i;
direkt nach i = 1;
einfügen, erhalten Sie den gleichen Fehler.
Der einfachste Weg, das Problem zu lösen, besteht darin, static int i;
vor den statischen Initialisierungsblock zu deklarieren.
"Illegale Vorwärtsreferenz" bedeutet, dass Sie versuchen, eine Variable zu verwenden, bevor sie definiert wird.
Das beobachtete Verhalten ist ein Symptom eines Javac-Bugs (siehe diesen Fehlerbericht). Das Problem scheint in neueren Versionen des Compilers behoben zu sein, z. OpenJDK 7.
schau dir
anTags und Links java