else…if
Kurz: Eine Kette mehrerer Bedingungen, die der Reihe nach geprüft werden — sobald eine zutrifft, läuft ihr Block, alle weiteren werden übersprungen.
Genauer: Syntaktisch ist else if kein eigenes Java-Schlüsselwort, sondern einfach ein verschachteltes if innerhalb des else-Zweigs des vorherigen if. Die Reihenfolge ist wichtig: die erste zutreffende Bedingung “gewinnt”, auch wenn eine spätere ebenfalls zutreffen würde.
if (note == 1) System.out.println("Sehr gut");
else if (note == 2) System.out.println("Gut");
else System.out.println("Befriedigend oder schlechter");Im Detail
int note = 3;
if (note == 1) {
System.out.println("Sehr gut");
} else if (note == 2) {
System.out.println("Gut");
} else if (note == 3) {
System.out.println("Befriedigend");
} else if (note >= 4 && note <= 6) {
System.out.println("Nicht ausreichend");
} else {
System.out.println("Ungültige Note");
}Weil nur die erste zutreffende Bedingung ausgeführt wird, ist die REIHENFOLGE bei sich überschneidenden Bereichen entscheidend — if (note >= 1) ... else if (note >= 4) ... würde den zweiten Zweig nie erreichen, weil bereits jede Zahl ≥ 4 auch ≥ 1 ist und somit schon im ersten Zweig landet. Bei vielen aufeinanderfolgenden else if-Zweigen, die alle denselben Wert gegen feste Konstanten prüfen (wie im Beispiel oben), ist ein Switch-Statement oft lesbarer und mitunter performanter, weil der Compiler dafür teils eine Sprungtabelle statt sequenzieller Vergleiche erzeugen kann.
Ineinander verschachtelte Bedingungen vs. else-if-Ketten
else if prüft Bedingungen SEQUENZIELL und unabhängig voneinander — jede Bedingung wird komplett neu ausgewertet, unabhängig davon, was vorher geprüft wurde. Das unterscheidet sich von echt verschachtelten if-Blöcken, bei denen eine innere Bedingung nur im Kontext der äußeren Sinn ergibt:
// else-if: unabhängige, sequenzielle Prüfungen
if (alter < 0) System.out.println("Ungültig");
else if (alter < 18) System.out.println("Minderjährig");
else if (alter < 65) System.out.println("Erwachsen");
else System.out.println("Senior");
// Echte Verschachtelung: die innere Bedingung ist nur im Kontext sinnvoll
if (istEingeloggt) {
if (hatAdminRechte) {
System.out.println("Admin-Bereich");
}
}Switch Expressions als moderne Alternative
Seit Java 14 bieten Switch Expressions eine kompaktere Schreibweise für genau den Fall, dass jeder Zweig lediglich einen anderen Wert liefert — der ->-Pfeil ersetzt dabei das fehleranfällige break klassischer switch-Statements und verhindert versehentliches “Durchfallen” in den nächsten Fall:
String kategorie = switch (note) {
case 1, 2 -> "Gut";
case 3, 4 -> "Bestanden";
default -> "Nicht bestanden";
};Für Bereichsprüfungen (< 18, >= 65 usw.) bleibt eine else if-Kette allerdings weiterhin nötig, da klassische switch-Konstrukte in Java nur exakte Wertevergleiche gegen Konstanten unterstützen, keine Bereiche.
Häufiger Fallstrick: fehlendes else am Ende
Eine if/else if-Kette ohne abschließendes else deckt nicht zwangsläufig alle Fälle ab — fällt keine Bedingung zu, passiert einfach gar nichts, was leicht übersehen wird:
int note = 7; // außerhalb des erwarteten Bereichs 1-6
if (note == 1) System.out.println("Sehr gut");
else if (note == 2) System.out.println("Gut");
// kein else - bei note=7 wird KOMPLETT NICHTS ausgegeben, ohne FehlermeldungEin abschließendes else als “Auffangbecken” für unerwartete Werte macht solche Lücken sichtbar, statt sie stillschweigend zu ignorieren.
Siehe auch: if…else, if-Statement, Switch-Statement