[JAVA] Können andere Anweisungen als Schleifen beschriftet werden?

Problem

LOOP1:for (String str1 : list1) { //Zur Aussage beschriftet
    for (String str2 : list2) {
        if (str1.equals(str2)) {
            found(str1);
            break LOOP1; //Verlassen Sie das Äußere für
        }
    }
}

Ist es dann möglich, andere Anweisungen als Schleifenanweisungen ** zu kennzeichnen?

  1. Andere Anweisungen als Schleifenanweisungen können nicht gekennzeichnet werden (ein Kompilierungsfehler tritt auf).
  2. In einigen Fällen können andere Anweisungen als Schleifenanweisungen beschriftet werden, aber es ist schließlich bedeutungslos, da eine Anweisung, die sich auf diese Bezeichnung bezieht, nicht geschrieben werden kann.
  3. In einigen Fällen können andere Anweisungen als Schleifenanweisungen gekennzeichnet werden, und in einigen Fällen können Anweisungen geschrieben werden, die sich auf die Bezeichnung beziehen.

jaba-2.png

Richtige Antwort

** 3. In einigen Fällen kann eine andere Anweisung als die Schleifenanweisung beschriftet werden, und in einigen Fällen kann eine Anweisung geschrieben werden, die sich auf die Bezeichnung bezieht. ** ** **

Kommentar

Die meisten Java-Anweisungen können beschriftet werden.

//Beschriftete Formel!
FOO: a = 42; // OK
//!
BAR: if (a > 0) b = 1;
else b = -1; // OK

[^ Anweisung-1]: In der Formatdefinition in der Java-Sprachspezifikation ist die Anweisung, die "Anweisung" entspricht, gekennzeichnet. Eine lokale Variablendeklarationsanweisung ("LocalVariableDeclarationStatement") ist keine Art von "Anweisung".

Kompilierungsfehler


//Anweisung zur deklarierten Variablendeklaration??
FOO: int a = 42; // NG!

Wenn dann die Blockanweisung und die Steueranweisung (einschließlich nicht nur der Schleife, sondern auch der if-Anweisung und der try-Anweisung), denen die Blockanweisung untergeordnet ist, gekennzeichnet sind (z. B. "LABEL:"), wird "break" in den Block eingefügt. Sie können der Anweisung mit "LABEL:" entkommen, indem Sie LABEL; "ausführen.

FOO: if (val > 1000) { //Beschriftete if-Anweisung!
    big = true;
    if (val % 2 == 0) break FOO; //Verlasse den Block
    bigOdd = true;
}

Beispielsweise kann es verwendet werden, wenn Sie in einem bestimmten Bereich einer Funktion "frühzeitig entkommen" möchten.

BLOCK:{ //Einfacher Block
    Foo foo1 = stor.findFoo(fooName1);
    if (foo1 == null)
        break BLOCK; //Verlasse den Block
    Foo foo2 = stor.findFoo(fooName2);
    if (foo2 == null)
        break BLOCK; //Verlasse den Block

    foo2.setBar(foo1.getBar());
    //Danach geht der Prozess endlos weiter...
}

Serpentin

Tatsächlich scheint es, dass Sie eine break-Anweisung schreiben können, die sich auf eine Bezeichnung bezieht, die an eine Anweisung ohne Blöcke angehängt ist.

FOO: break FOO; // OK!!!!

Nun, es ist überhaupt nicht nützlich ...

Recommended Posts

Können andere Anweisungen als Schleifen beschriftet werden?
Scala String kann nicht nur für java.lang.String-Methoden verwendet werden
Ruby-Array-Methoden, die mit Rails verwendet werden können (außer jedem)