Kopfgesteuerte Schleife
Bild: Taylor, CC BY-SA 4.0, Wikimedia Commons
Kurz: Eine Schleife, deren Abbruchbedingung VOR jedem Durchlauf geprüft wird — trifft sie schon beim ersten Check nicht zu, läuft der Körper kein einziges Mal.
Genauer: for und while sind in Java beide kopfgesteuert. Das unterscheidet sie von der fußgesteuerten do...while-Schleife, bei der die Bedingung erst NACH dem ersten Durchlauf geprüft wird — der Körper läuft also garantiert mindestens einmal.
Im Detail
int n = 10;
// while: kopfgesteuert - Bedingung zuerst geprüft
while (n > 0) {
System.out.println(n);
n--;
}
// for: ebenfalls kopfgesteuert, nur mit fest strukturiertem Kopf
for (int i = 0; i < 5; i++) {
System.out.println(i);
}
// Läuft 0 Mal, weil die Bedingung von Anfang an false ist
int x = 5;
while (x < 0) {
System.out.println("wird nie ausgegeben");
}Die überwiegende Mehrheit der Schleifen in echtem Java-Code ist kopfgesteuert (for und while), weil das typische Muster “solange/für alle Elemente, die eine Bedingung erfüllen, mache X” ist — und dabei ist es meist völlig plausibel, dass X gar nicht laufen soll, wenn die Bedingung von Anfang an nicht zutrifft (z. B. eine leere Liste durchlaufen: null Durchläufe sind hier das erwartete, korrekte Verhalten). Die fußgesteuerte do-while-Schleife bleibt die Ausnahme für die selteneren Fälle, in denen mindestens ein Durchlauf garantiert sein MUSS, bevor überhaupt geprüft werden kann.
for vs. while — wann welche Form?
Beide sind kopfgesteuert und lassen sich ineinander umformulieren, unterscheiden sich aber in der typischen Verwendung: for bündelt Initialisierung, Bedingung und Update in einem Kopf und eignet sich deshalb besonders, wenn die Anzahl der Durchläufe VORAB bekannt oder klar zählbar ist (z. B. “für jedes Element eines Arrays”). while passt besser, wenn die Abbruchbedingung von etwas abhängt, das sich erst WÄHREND der Schleife ergibt (z. B. “solange noch Zeilen in einer Datei zu lesen sind”):
// for: Anzahl der Durchläufe von vornherein klar
for (int i = 0; i < array.length; i++) { ... }
// while: Abbruch hängt von etwas ab, das sich erst zur Laufzeit ergibt
String zeile;
while ((zeile = reader.readLine()) != null) { ... }Endlosschleifen als Sonderfall
for (;;) und while (true) sind beides gültige, absichtliche Endlosschleifen — sie laufen kopfgesteuert, aber ihre Bedingung ist konstant true (bzw. bei for (;;) schlicht weggelassen, was Java als “immer wahr” interpretiert). Solche Konstrukte sind kein Fehler, sondern ein bewusstes Muster für Server-Loops, Event-Loops oder Fälle, in denen der Abbruch über ein break mitten im Körper erfolgen soll, statt über eine feste Kopfbedingung.
Siehe auch: Fußgesteuerte Schleife, For-Schleife, While-Schleife