Wenn wir uns den Java-Standard §14.7 ansehen, sehen wir, dass Aussagen dazu führen können haben Label-Präfixe, zB:
LabeledStatement:
Bezeichner: Anweisung
Theoretisch sollte eine Beschriftung in der Lage sein, jede nachfolgende Anweisung zu kennzeichnen. So kompiliert zum Beispiel folgendes:
%Vor%Intuitiv kompiliert dies auch:
%Vor%Aber Folgendes wird nicht kompiliert:
%Vor%Auch wenn dies der Fall ist (beachten Sie die Bereichsklammern):
%Vor%Die Frage hängt also davon ab, ob Erklärungen Aussagen sind oder nicht. Laut dem Standard (und der Online-Dokumentation ):
Zusätzlich zu Ausdrucksanweisungen gibt es zwei andere Arten von Anweisungen: Deklarationsanweisungen und Steuerflussanweisungen. Eine Deklarationsanweisung deklariert eine Variable.
Ich habe dieses Verhalten in Java 7 und 8 sowohl auf OSX als auch auf Windows bemerkt. Ist das ein Fehler oder missverstehe ich den Standard?
Der Ausdruck
%Vor%ist eine Deklarationserklärung für lokale Variablen .
Die statement
wird in der Syntax einer Label-Anweisung
LabeledStatement
:
Identifier
:Statement
enthält keine Deklarationsanweisungen für lokale Variablen. Sie können sie daher nicht direkt in einer markierten Anweisung verwenden.
Lokale Deklarationsanweisungen können innerhalb von Blöcken , die in gekennzeichneten Aussagen verwendet werden können.