Controls

Die Ablaufsteuerung von Programmen wird durch Control Statements gesteuert. Diese Anweisungen verkörpern das Paradigma der strukturierten Programmierung, welches erstmals in der Programmiersprache ALGOL (ALGOrithmicLanguage) verwirklicht wurde. Soviel zur Historie.

while Statement

Ein Block von Statements wird solange abgearbeitet und ggf. wiederholt, bis die while condition den Wert false liefert. Ist die Bedingung bereits vor Eintritt in den Block erfüllt, wird der Block nie betreten. Im hiesigen Sprachgebrauch hat sich auch der Begriff "abweisende Schleife" etabliert.
Generelle Form:

while (expression) {
 statement(s); 
}

Beispiel: Die Werte von 10 bis 0 sollen tabellarisch ausgegeben werden.

int val = 10; 
 while (val > -1) { 
  System.out.println( val--);
 }

do...while Statement

Ähnlich des while Statements verhält sich diese Schleifenkonstruktion. Hier wird ein Block solange abgearbeitet, bis eine Abbruchbedingung ist. Es bestehen zwei wesentliche Unterschiede: Die Schleife wird unter allen Umständen betreten. Die Schleife wird verlassen wenn die while condition den Wert true liefert.
Generelle Form:

do {
statement(s);
} while (expression);

Beispiel: Die Werte von 10 bis 0 sollen tabellarisch ausgegeben werden.

int val = 10; 
 do
 { 
   Sytem.out.println( val--);
 } while (val < 0);

for Statement

Schleifen, deren Bearbeitungsgrenzen feststehen, können auch als for-Schleifen (im Sinne von ... bis ...) gestaltet werden. Diese Form stellt eine Alternative zum while Statement dar, bietet aber außerdem die Kapselung der Initialisierungswerte und ggf. der Inkremetierungswerte an.
Generelle Form:

for (init; terminate; increment) {
 statement(s); 
}

Beispiel: Die Werte von 10 bis 0 sollen tabellarisch ausgegeben werden.
 

for (int i = 10; i >= 0;i--) {
 System.out.println( i);
}

Auffällig ist auch noch die gekapselte Deklaration des laufenden Index. Die im Beispiel verwendete Variable i existiert nach der Abarbeitung der Schleife praktisch nicht mehr. Genauer gesagt: Der Index ist nicht mehr erreichbar, denn es handelt sich um eine lokale Variable innerhalb des for Statements.

if und if...else Statements

Die einfachste Form der Ablaufsteuerung ist das if Statement. Wenn eine Bedingung erfüllt ist, dann ...
Generelle Form:

if (expression) {
 statement(s); 
}

Beispiel: Wenn ein String mit großen Buchstaben beginnt soll er ausgeben werden.

if (str.charAt(0).isUpperCase()){
 System.out.println( str); 
}

Nun noch ein Blick auf den alternativen Zusatz "else":
Generelle Form:

if(expression) 
     {
      statement(s);
     } 
else {
      statement(s);
     }

Beispiel: Wenn ein String mit großen Buchstaben beginnt soll er ausgeben werden, andernfalls soll "zu klein." erscheinen.

if   (str.charAt(0).isUpperCase()) 
     {
      System.out.println( str); 
     }
else {
      System.out.println( "zu klein.");
     }

switch Statement

Eine besondere Form des if Statements stellt das Swatch Statement dar. Unterschiedliche Werte ein und desselben Ausdrucks werden differenziert.
Generelle Form:

Swatch (Expression) {
 Case constants: statement(s); break;
 Case constants: statement(s); break;
 ... 
 default: statement(s); 
}

Beispiel: Die Wochentage sollen entsprechend ihrer Nummerierung (1=Montag, ... 7=Sonntag) ausgegeben werden.
 

String str; 
...
switch (daynum) {
 case 1: str = "Montag"; break;
 case 2: str = "Dienstag"; break; 
 case 3: str = "Mittwoch"; break; 
 case 4: str = "Donnerstag"; break;
 case 5: str = "Freitag"; break; 
 case 6: str = "Samstag"; break;
 case 7: str = "Sonntag"; break; 
 default: str = "under construction";
}
System.out.println( str);

break Statement

Dieses Statement bewirkt das Verlassen eines Blocks. Sinnvoll wird es in Schleifen eingesetzt, um diese auf gewaltsame Weise zu verlassen. Unabdingbar ist dieses Statement auch bei der Anwendung des switch Statements, wie eben gezeigt.
Beispiel: Die Zeichen eines Strings unbekannter Länge sollen solange ausgegeben werden, bis ein Leerzeichen erkannt wird:

for(int i=0;;) { 
char ch = str.charAt(i++); 
 if  (ch != ' ') 
      System.out.print( ch);
 else break;
}

Es besteht auch die Möglichkeit, das break Statement mit einem Ziel zu versehen. Der folgende Abschnitt zeigt diese Möglichkeit genauer.

label Statement

Ein Label oder ein Sprungziel ist zwar ein Anachronismus in modernen Programmiersprachen, trotzdem hält er sich tapfer. Hier soll nur kurz auf diese Möglichkeit eingegangen werden.
Beispiel: Wenn ein String das Zeichen '@' enthält, soll "at ", gefolgt vom Reststring ausgegeben werden.

int idx = 0;
while (i < str.length()) { 
 if (str.charAt(i++) == '@') break mail; 
} 
... 
mail: System.out.println( "at " + str.substring(i));

continue Statement

Mit dieser Anweisung wird das Überspringen von Blockabschnitten ermöglicht. Dieses Statement mag eine Alternative zu Statements der Form if...else sein.
Beispiel: In einem String sollen alle Leerzeichen durch '_' (underlines) ersetzt werden. Die Anzahl der ersetzten Zeichen soll ebenfalls ermittelt werden.

int numSpace = 0;
 for (int i=0; i < str.length(); i++) {
 if (str.charAt(i) != ' ') continue;
 numspace++;
 str.setCharAt( i, '_'); 
 }

return Statement

Dieses Statement erweist sich als ungemein praktisch um Methoden schnell und definiert zu verlassen. Damit kann jede Methode mit beliebig vielen Ausgängen versehen werden.
Beispiel: Ein String soll nach einer bestimmten Zeichenfolge durchsucht werden; das Ergebnis ist true oder false.

public boolean isInside( String str, String src) {
 return (str.indexOf( src) != 0); 
}

exception Statements

Java erlaubt unter bestimmten Voraussetzungen die Anwendung der Versuch-und-Irrtum-Prinzips. So kann der Quelltext durchaus korrekt sein, aber bei der Ausführung des übersetzten Codes treten unerwartete Bedingungen auf. So könnte beispielsweise eine Internetverbindung während einer Übertragung unterbrochen werden, eine Datei während der Bearbeitung vom Systemadministrator umbenannt werden oder einfach nur eine Division durch Null stattfinden. Auf die Verwendung dieser Statements wird noch detailliert eingegangen, trotzdem sei hier bereits die generelle Form skizziert.

try     { 
         statement(s); 
        } 
catch   (exceptiontype name)
        { 
         statement(s); 
        } 
catch   (exceptiontype name)
        {
         statement(s); 
        }
finally { 
         statement(s); 
        }