Java unterstützt drei Sprungoperatoren – Verwendung des Operators
Der Operator
Neben der Verwendung in Switch- Anweisungen und Schleifen Verwendung des Operators
Manchmal ist es sinnvoll, die nächste Iteration einer Schleife frühzeitig zu starten. Das heißt, Sie müssen mit der Ausführung der Schleife fortfahren, aber die Verarbeitung des restlichen Codes in ihrem Körper für diese bestimmte Iteration beenden. Tatsächlich handelt es sich hierbei um einen Operator
Die letzte Steueranweisung lautet
break
, continue
und return
. Sie übertragen die Kontrolle auf einen anderen Teil Ihres Programms. Betrachten wir jeden der Operatoren im Detail.
Verwendung des Operatorsbreak
Der Operator break
in Java wird in drei Fällen verwendet. Wie Sie bereits gesehen haben, endet die Anweisungsfolge zunächst an den Anweisungsverzweigungen switch
. Zweitens kann es genutzt werden, um aus einer Schleife auszubrechen. Drittens kann es als „zivilisierte“ Form des bedingungslosen Sprungoperators verwendet werden goto
. In diesem Abschnitt werden die letzten beiden Fälle erläutert. Verwenden Sie diese Option , break
um eine Schleife zu verlassen. Mit break
können Sie die sofortige Beendigung der Schleife erzwingen und dabei den bedingten Ausdruck und den verbleibenden Code im Schleifenkörper umgehen. Wenn eine Anweisung break
innerhalb einer Schleife angetroffen wird, wird die zweite Anweisung beendet und die Programmsteuerung an die folgende Anweisung übergeben. Einfaches Beispiel:
// Использование break для выхода из цикла.
public class BreakLoop {
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
if (i == 4) {
break; // завершить цикл, если i = 4
}
System.out.println("i: " + i);
}
System.out.println("Цикл завершен.");
}
}
Dieses Programm generiert die folgende Ausgabe:
i: 0
i: 1
i: 2
i: 3
Цикл завершен.
Obwohl die Schleife for
hier so konzipiert ist, dass sie ihre Anweisungen 0 bis 99 Mal ausführt, break
bewirkt der Operator, dass sie vorzeitig beendet wird, wenn i gleich 4 ist. Der Operator break
kann mit jeder Java-Schleife verwendet werden, auch mit absichtlichen Endlosschleifen. Unten sehen Sie beispielsweise das vorherige Programm, das mit einer Schleife codiert wurde while
. Die Ausgabe dieses Programms ist die gleiche wie die seines Vorgängers.
// Использование break для выхода из while-цикла.
public class BreakLoop2 {
public static void main(String[] args) {
int i = 0;
while (i < 100) {
if (i == 4) {
break; // закончить цикл, если i = 4
}
System.out.println("i: " + i);
i++;
}
System.out.println("Цикл завершен.");
}
}
Bei Verwendung innerhalb einer Reihe verschachtelter Schleifen break
verlässt die Anweisung nur die innerste Schleife. Zum Beispiel:
// Использование break во вложенных циклах.
public class BreakLoop3 {
public static void main(String[] args) {
for (int i = 0; i < 3; i++) {
System.out.print("Итерация " + i + ": ");
for (int j = 0; j < 10; j++) {
if (j == 4) {
break; // закончить цикл, если j = 4
}
System.out.print(j + " ");
}
System.out.println();
}
System.out.println("Цикл завершен.");
}
}
Dieses Programm generiert die folgende Ausgabe:
Итерация 0: 0 1 2 3
Итерация 1: 0 1 2 3
Итерация 2: 0 1 2 3
Цикл завершен.
Wie Sie sehen, break
bewirkt die Anweisung in der inneren Schleife, dass nur diese Schleife beendet wird. Die äußere Schleife ist nicht betroffen. Lassen Sie uns noch zwei Bemerkungen dazu machen break
. Erstens können mehrere Anweisungen in einer Schleife erscheinen break
. Seien Sie jedoch vorsichtig. Zu viele davon neigen dazu, Ihren Code zu zerstören. Zweitens wirkt sich das break
, das den - Operator beendet switch
, nur auf den angegebenen switch
- Operator aus (und nicht auf die Schleifen, die ihn enthalten). Kommentar: Break
wurde nicht als normales Mittel zum Schleifenabschluss konzipiert. Diesem Zweck dient der bedingte Ausdruck im Schleifenheader. Der Operator break
sollte nur zum Unterbrechen der Schleife verwendet werden, wenn bestimmte Sondersituationen auftreten.
break
Als Formular verwendengoto
Neben der Verwendung in Switch- Anweisungen und Schleifen break
kann es auch allein als „zivilisierte“ Form von verwendet werden goto
. Java enthält den Operator nicht, goto
da es die Verzweigung auf willkürliche und unstrukturierte Weise ausführt. Code, der . intensiv verwendet, goto
ist normalerweise schwer zu verstehen und zu warten. Es überschreibt auch einige Compiler-Optimierungen. Es gibt jedoch mehrere Stellen in einem Programm, an denen goto
der Kontrollfluss ein wertvolles und legitimes Konstrukt ist. Dies kann beispielsweise goto
nützlich sein, wenn Sie aus einer tief verschachtelten Reihe von Schleifen ausbrechen. Um mit solchen Situationen umzugehen, definiert Java eine erweiterte Form des Operators break
. Damit können Sie einen oder mehrere Codeblöcke verlassen. Diese Blöcke müssen nicht Teil einer Schleife oder Anweisung sein switch
. Dies kann ein beliebiger Block sein. Als Nächstes können Sie genau bestimmen, wo die Ausführung fortgesetzt werden soll, da dieses Formular break
mit der Marke arbeitet und die Vorteile von bietet goto
und deren Probleme umgeht. Eine break
beschriftete Anweisung hat die folgende allgemeine Form: break label;
Hier label
ist der Name einer Beschriftung, die einen Codeblock identifiziert. Wenn dieses Formular break
ausgeführt wird, wird die Kontrolle vom benannten Codeblock (dessen Bezeichnung in der Anweisung angegeben ist break
) auf die Anweisung übertragen, die diesem Block folgt. Ein markierter Codeblock muss unbedingt diese Anweisung enthalten break
, es ist jedoch nicht erforderlich, dass diese Einbindung direkt erfolgt (d. h. break
sie kann nicht direkt in einen Block mit eigener Bezeichnung, sondern in einen darin verschachtelten, möglicherweise ebenfalls markierten Block eingebunden werden ). Das bedeutet, dass Sie einen markierten Operator verwenden können, break
um einer Reihe verschachtelter Blöcke zu entkommen. Sie können jedoch keinen break
Codeblock verwenden, der keine enthält break
. Um einen Block zu benennen, platzieren Sie eine Beschriftung am Anfang des Blocks (vor der öffnenden geschweiften Klammer). Eine Bezeichnung ist ein beliebiger gültiger Java-Bezeichner, gefolgt von einem Doppelpunkt. Nachdem ein Block beschriftet wurde, kann seine Beschriftung als Argument für den Operator verwendet werden break
. Dadurch wird die Ausführung am Ende des markierten Blocks fortgesetzt. Das folgende Programm enthält beispielsweise drei verschachtelte Blöcke mit jeweils eigenem Label. Der Operator break
bewegt sich vorwärts, über das Ende des mit der Beschriftung markierten Blocks hinaus second
und überspringt zwei Operatoren println()
.
// Использование break Wie цивoderзованной формы goto.
public class Break {
public static void main(String[] args) {
boolean t = true;
first:
{
second:
{
third:
{
System.out.println("Перед оператором break.");
if (t) {
break second; // выход из блока second
}
System.out.println("Данный оператор никогда не выполнится");
}
System.out.println("Данный оператор никогда не выполнится ");
}
System.out.println("Данный оператор размещен после блока second.");
}
}
}
Das Ausführen dieses Programms erzeugt die folgende Ausgabe:
Перед оператором break.
Данный оператор размещен после блока second.
Eine der häufigsten Anwendungen des Label-Operators break
besteht darin, verschachtelte Schleifen zu umgehen. Im folgenden Programm wird beispielsweise die äußere Schleife nur einmal ausgeführt:
// Использование break для выхода из вложенных циклов.
public class BreakLoop4 {
public static void main(String[] args) {
outer:
for (int i = 0; i < 3; i++) {
System.out.print("Итерация " + i + ": ");
for (int j = 0; j < 100; j++) {
if (j == 10) {
break outer; // выйти из обоих циклов
}
System.out.print(j + " ");
}
System.out.println("Эта строка никогда не будет выведена");
}
System.out.println("Цикл завершен.");
}
}
Das Programm generiert die folgende Ausgabe:
Итерация 0: 0 1 2 3 4 5 6 7 8 9 Цикл завершен.
Es ist leicht zu erkennen, dass beide Schleifen enden, wenn die innere Schleife vor dem Ende der äußeren unterbrochen wird. Beachten Sie, dass Sie keinen break
Sprung zu einer Beschriftung durchführen können, die nicht für den umschließenden Block definiert ist. Das folgende Programm ist beispielsweise ungültig und lässt sich nicht kompilieren:
// Эта программа содержит ошибку.
public class BreakErr {
public static void main(String[] args) {
one:
for (int i = 0; i < 3; i++) {
System.out.print("Итерация " + i + ": ");
}
for (int j = 0; j < 100; j++) {
if (j == 10) {
break one; //He верно!
}
System.out.print(j + " ");
}
}
}
Da eine mit Eins gekennzeichnete Schleife keine Anweisung enthält break
, ist es nicht möglich, die Kontrolle an diesen Block zu übergeben.
Verwendung des Operatorscontinue
Manchmal ist es sinnvoll, die nächste Iteration einer Schleife frühzeitig zu starten. Das heißt, Sie müssen mit der Ausführung der Schleife fortfahren, aber die Verarbeitung des restlichen Codes in ihrem Körper für diese bestimmte Iteration beenden. Tatsächlich handelt es sich hierbei um einen goto
Übergang über die nächsten Körperoperationen hinaus zum Ende des Schleifenblocks. Diese Aktion wird vom Bediener ausgeführt continue
. In Schleifen bewirkt der Operator while
„and“ , dass die Steuerung direkt an den Bedingungsausdruck übergeben wird, der die Schleife steuert. In einer Schleife geht die Kontrolle zunächst an den iterativen Teil der Anweisung und dann an den bedingten Ausdruck über. Bei allen drei Schleifen wird jeglicher Zwischencode umgangen. Nachfolgend finden Sie ein Beispielprogramm, das zwei Zahlen in jede Zeile druckt:do while
continue
for
for
continue
// Демонстрирует continue.
public class Continue {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.print(i + " ");
if (i % 2 == 0) {
continue;
}
System.out.println("");
}
}
}
Dieser Code verwendet die Operation %
(Modulo), um zu prüfen, ob etwas i
gerade ist. Wenn dies der Fall ist, wird die Schleife fortgesetzt, ohne dass ein Zeilenumbruchzeichen ausgegeben wird. Programmausgabe:
0 1
2 3
4 5
6 7
8 9
Wie beim Operator break
, continue
können Sie eine Beschriftung definieren, die angibt, welche umschließende Schleife fortgesetzt werden soll. Ein Beispielprogramm, das continue
eine dreieckige Multiplikationstabelle von 0 bis 9 druckt.
// Использование continue с меткой.
public class ContinueLabel {
public static void main(String[] args) {
outer:
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (j > i) {
System.out.println();
continue outer;
}
System.out.print(" " + (i * j));
}
}
System.out.println();
}
}
Die Anweisung continue
in diesem Beispiel beendet die Schleife mit der Auswertung j
und fährt mit der nächsten Iteration der Schleife fort, die von gesteuert wird i
. Ausgabe dieses Programms:
0
0 1
0 2 4
0 3 6 9
0 4 8 12 16
0 5 10 15 20 25
0 6 12 18 24 30 36
0 7 14 21 28 35 42 49
0 8 16 24 32 40 48 56 64
0 9 18 27 36 45 54 63 72 81
Es ist äußerst selten nützlich continue
. Ein Grund dafür ist, dass Java einen umfangreichen Satz an Schleifenanweisungen bereitstellt, die für die meisten Anwendungen geeignet sind. Für besondere Situationen, in denen es erforderlich ist, die Iteration vorzeitig zu beenden, continue
bietet die Anweisung jedoch eine strukturierte Möglichkeit, diese Aufgabe zu erfüllen.
Operatorreturn
Die letzte Steueranweisung lautet return
. Es wird verwendet, um explizit von einer Methode zurückzukehren, d. h. es überträgt die Programmsteuerung zurück an das aufrufende Programm. Der Operator return
wird als Übergangsoperator klassifiziert. Obwohl die vollständige Diskussion warten muss, bis die Methoden besprochen werden, wird hier ein kurzer Überblick gegeben return
. Der Operator return
kann an einer beliebigen Stelle in einer Methode verwendet werden, um zu dem Programm zurückzukehren, das die Methode aufruft. Die Anweisung return
beendet sofort die Ausführung der Methode, in der sie sich befindet. Das folgende Beispiel verdeutlicht dies:
// Демонстрирует return.
public class Return {
public static void main(String[] args) {
boolean t = true;
System.out.println("Перед оператором return.");
if (t) {
return; // возврат в вызывающую программу
}
System.out.println("Этот оператор никогда не выполнится.");
}
}
Dies return
kehrt zur Laufzeit zum Java-System zurück, da es das System ist, das die aufruft main()
. Ausgabe dieses Programms:
Перед оператором return.
Möglicherweise stellen Sie fest, dass die Schlussanweisung println()
nicht ausgeführt wird. Zur Ausführungszeit return
wird die Kontrolle wieder an das aufrufende Programm übergeben. Eine letzte Anmerkung. Im vorherigen Programm if
ist der (t)-Operator erforderlich. Ohne sie würde der Java-Compiler einen „Unerreichbarer Code“-Fehler auslösen, da er wüsste, dass die letzte Anweisung println()
niemals ausgeführt würde. Um diesen Fehler zu verhindern, wird der (t)-Operator verwendet if
; er täuscht den Compiler für diese Demonstration. Link zur Originalquelle: Übergangsoperatoren
GO TO FULL VERSION