Besser lernen
Java-Fehlermeldungen verstehen: die 10 häufigsten auf Deutsch
Veröffentlicht am 22. Oktober 20266 Min. Lesezeit
Du drückst auf Ausführen, und statt einer Ausgabe kommt rote Schrift auf Englisch. Das passiert allen, auch Profis, jeden Tag. Die gute Nachricht: Fast alle Fehler am Anfang gehören zu einer Handvoll Meldungen. Hier lernst du die zehn häufigsten kennen, jeweils mit einem kleinen kaputten Beispiel und der Lösung.
So liest du eine Java-Fehlermeldung
Der Compiler javac übersetzt deinen Code, bevor er läuft. Findet er einen Fehler, sieht das so aus:
Main.java:3: error: ';' expected
int age = 17
^
1 error
Darin stecken drei Informationen:
- Datei und Zeile:
Main.java:3heißt Zeile 3. - Die Meldung: Alles nach
error:sagt, was Java stört. - Das Dach
^: Es zeigt auf die Stelle, an der Java aufgegeben hat. Der eigentliche Fehler steht oft genau dort oder kurz davor.
Bei mehreren Meldungen gilt: Behebe immer die erste zuerst und kompiliere neu. Ein einziger Fehler kann viele Folgefehler auslösen, die danach von selbst verschwinden.
Syntaxfehler: Java versteht den Satzbau nicht
1. ';' expected
Am Ende einer Anweisung fehlt ein Semikolon. Java merkt das erst am Zeilenende, darum zeigt das Dach hinter die 17.
int age = 17System.out.println(age);
Lösung: int age = 17;. Steht die Meldung bei einer Zeile, die korrekt aussieht, schau in die Zeile davor. Eine Verwandte ist ')' or ',' expected: Dann fehlt eine schließende runde Klammer, oft vor dem Semikolon.
2. reached end of file while parsing
Java ist am Ende der Datei angekommen, aber ein Block ist noch offen. Es fehlt eine schließende geschweifte Klammer.
public class Main { public static void main(String[] args) { System.out.println("Hallo"); }
Lösung: Ergänze die fehlende } am Ende. Damit das nicht wieder passiert, schreib zu jeder { sofort die passende } und rücke sauber ein. Die Formatieren-Funktion im Editor zeigt dir schnell, wo ein Block nicht passt.
Namen und Typen
3. cannot find symbol
Die häufigste Meldung überhaupt. Java kennt einen Namen an dieser Stelle nicht. Welcher es ist, steht unter symbol:.
Main.java:4: error: cannot find symbol
System.out.println(Count);
^
symbol: variable Count
location: class Main
Typische Ursachen:
- Tippfehler oder Groß- und Kleinschreibung:
Countist nichtcount,stringist nichtString. - Variable nicht angelegt: Du benutzt sie, bevor du sie mit Typ deklariert hast.
- Falscher Block: Eine Variable aus einer Schleife oder einem
ifgilt nur darin. - Fehlender Import:
Scannerbrauchtimport java.util.Scanner;, wie im Artikel zu Ein- und Ausgabe in Java gezeigt.
4. incompatible types: String cannot be converted to int
Der Wert passt nicht zum Typ der Variable. Hier soll Text in eine Zahl.
int points = "12";
Lösung: Entweder int points = 12; ohne Anführungszeichen, oder du wandelst bewusst um: int points = Integer.parseInt("12");. Die Meldung nennt immer beide Typen, erst den gelieferten, dann den verlangten.
5. incompatible types: possible lossy conversion from double to int
Ein double soll in eine int-Variable. Dabei gingen die Nachkommastellen verloren, darum weigert sich Java.
double average = 2.7;int rounded = average;
Lösung: Nimm den passenden Typ (double rounded = average;) oder wandle ausdrücklich um: int rounded = (int) average;. Achtung, das schneidet ab und ergibt 2, nicht 3. Zum Runden gibt es Math.round.
6. bad operand types for binary operator '>'
Der Operator passt nicht zu den Typen. Klassiker: Strings mit > oder == vergleichen.
Main.java:7: error: bad operand types for binary operator '>'
if (name > "Leon") { }
^
first type: String
second type: String
Lösung: Strings vergleichst du mit Methoden. name.equals("Leon") prüft Gleichheit, name.compareTo("Leon") > 0 die alphabetische Reihenfolge. Mehr dazu im Artikel über Strings in Java.
Methoden, Variablen und Klassen
7. missing return statement
Die Methode verspricht einen Rückgabewert, aber nicht jeder Weg endet mit return.
static int max(int a, int b) { if (a > b) { return a; } else if (b >= a) { return b; }}
Für dich ist klar, dass einer der Fälle immer zutrifft. Java prüft das aber nicht inhaltlich. Lösung: Mach aus else if ein einfaches else oder setz ein return ans Ende. Wie Rückgabewerte funktionieren, erklärt der Artikel zu Methoden und Rekursion.
8. variable sum might not have been initialized
Die Variable wird gelesen, bevor sie sicher einen Wert hat. Hier bekommt sum nur im if einen Wert.
int sum;if (x > 0) { sum = 5;}System.out.println(sum);
Lösung: Gib der Variable gleich beim Anlegen einen Startwert, also int sum = 0;.
9. non-static method greet() cannot be referenced from a static context
main ist static. Es gehört zur Klasse, nicht zu einem Objekt, und kann darum nicht direkt auf Methoden oder Variablen ohne static zugreifen. Für Variablen heißt die Meldung non-static variable count cannot be referenced from a static context.
public class Main { void greet() { System.out.println("Hi"); }
public static void main(String[] args) { greet(); }}
Lösung: Schreib static void greet(), oder leg ein Objekt an: new Main().greet();. Was der Unterschied genau bedeutet, lernst du bei Klassen und Objekten.
10. class Hello is public, should be declared in a file named Hello.java
Eine public-Klasse muss genauso heißen wie ihre Datei. Die Datei heißt Main.java, die Klasse aber Hello.
public class Hello { public static void main(String[] args) { System.out.println("Hi"); }}
Lösung: Benenne die Klasse in Main um, oder die Datei in Hello.java. Das passiert oft, wenn du Code aus einem Video oder Chat übernimmst.
Und Exceptions zur Laufzeit?
Manche Fehler meldet nicht der Compiler, sondern erst das laufende Programm. Dann siehst du eine Exception mit Zeilennummer:
AusgabeException in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3 at Main.main(Main.java:5)
Das Array hat drei Elemente mit den Indizes 0 bis 2, die Schleife wollte Index 3 lesen. Fast immer steht in der Bedingung <= statt <. Siehe dazu Arrays in Java. Die zweite häufige Exception ist die NullPointerException, etwa Cannot invoke "String.length()" because "name" is null: Eine Variable zeigt auf kein Objekt. Wie du solche Ausnahmen gezielt behandelst, steht im Artikel zu Ausnahmen und Enums.
Fehlermeldungen schneller verstehen mit Jario
Wenn du Java lokal einrichtest, kommt oft noch ein Fehler vor allen anderen. Dafür gibt es einen eigenen Beitrag: „javac wird nicht erkannt“. In Jario fällt das weg, weil der Code im Browser geschrieben und auf unserem Server ausgeführt wird.
Bei Compilerfehlern hilft Jario dir an zwei Stellen. Bei der Meldung erklärt ein Hinweis „Was heißt das?“ die häufigen Compilerfehler auf Deutsch, also genau die Meldungen aus diesem Beitrag. Reicht das nicht, kannst du den KI-Tutor mit „Fehler erklären“ fragen. Er kennt die Aufgabe und deinen Code und erklärt den Fehler an deiner Stelle, ohne dir die Lösung zu schreiben. Außerdem markiert der Editor Fehler direkt im Code, und eine Endlosschleife friert nichts ein, sondern wird mit „Zeitlimit überschritten. Vermutlich eine Endlosschleife.“ gestoppt.
Wer Fehler lieber in einen Chat kopiert, findet in Java lernen mit ChatGPT Regeln, mit denen du dabei trotzdem etwas lernst. Und wenn du in der Klausur ohne Compiler auskommen musst, hilft dir Java-Klausur auf Papier. Lies jede Meldung ab jetzt einmal bewusst: erste Meldung, Zeile, Dach. Nach ein paar Tagen erkennst du die zehn Klassiker auf einen Blick.
Passende Artikel zum Lernen
- Ein- und AusgabeJava Ein- und Ausgabe einfach erklärt: Werte mit println und printf ausgeben, Zahlen mit Scanner einlesen. Mit Beispielen und typischen Fehlern.Zum Artikel
- Methoden und RekursionJava Methoden einfach erklärt: Parameter, return, Überladen, varargs und Rekursion mit Beispielen. Plus typische Fehler wie ein fehlendes return.Zum Artikel
- Ausnahmen und EnumsJava Exceptions einfach erklärt: try, catch, finally, throw, eigene Ausnahmen und Enums mit Beispielen. Plus typische Fehler wie leere catch-Blöcke.Zum Artikel
Weitere Beiträge
- Besser lernenKI bei ÜbungsblätternKI bei Übungsblättern nutzen, ohne Plagiat zu riskieren: wo du die Regeln deines Moduls findest, was meist als Grauzone gilt und wie du fair Hilfe holst.Weiterlesen
- Besser lernenJava-Lernplan für AzubisJava lernen als Azubi neben Betrieb und Berufsschule: ein 8-Wochen-Plan mit 30 Minuten am Tag, was die IHK-Prüfung verlangt und wie du dranbleibst.Weiterlesen
- Besser lernenJava lernen mit ChatGPTJava lernen mit ChatGPT, ohne dass du in der Klausur vor einem leeren Blatt sitzt: Regeln, gute Prompts und ein Selbsttest, ob du es wirklich kannst.Weiterlesen