Illegales Forward-Referenz-Java-Problem

8

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?

    
Timofei 31.01.2013, 11:42
quelle

4 Antworten

15

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.

    
assylias 31.01.2013, 11:46
quelle
3

Sie können Base zu Ihrer i-Variablen im statischen Block hinzufügen oder Sie müssen static int i vor dem Block deklarieren. Eine andere Lösung besteht darin, eine statische Methode anstelle einer statischen Blockierung zu erstellen.

%Vor%     
kmb 31.01.2013 11:52
quelle
2

"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

an

Illegaler Vorwärtsreferenzfehler für statische Endfelder

    
Massimiliano Peluso 31.01.2013 11:46
quelle
2

Ändern Sie Ihren Code in:

%Vor%     
TheWhiteRabbit 31.01.2013 11:47
quelle

Tags und Links