Fehlermeldungen in Java
Fehlermeldungen in der Konsole beim Kompilieren und Ausführen von Code sind nicht immer selbsterklärend. Um einen besseren Überblick zu haben, was die Fehler bedeuten und wie man diese beheben kann, werden hier die am häufigsten auftretenden Fehler aufgelistet.
Je nach verwendeter Java-Version können die Meldungen auf Englisch oder Deutsch erscheinen.
Was tun, wenn ich dennoch nicht weiter weiß?
Nachschlagen der Fehlermeldung:
Dafür kann auch der in 5Code integrierte
Browser verwendet werden.
Nachfragen bei den Tutor*innen:
Wenn sonst keine Lösung gefunden werden kann
und die Mitstudierenden auch nicht weiter wissen, sind die Tutor*innen immer bereit
zu helfen.
Kompilier-Fehler
Array erforderlich, aber <X> gefunden
Auf Englisch: array required, but <X> found
array required but String found String b = a[0]; ^
Mögliche Fehlerursachen
-
Zugriff mithilfe von
[]auf den Index einer Variable, die nicht vom Typ Array ist
Mögliche Lösungen
- Überprüfen des Typs der Variable
- Entsprechende Zugriffsmethode des Typs verwenden, z.B. "get()" bei Listen
ERROR_array_required
Symbol nicht gefunden
Auf Englisch: cannot find symbol
cannot find symbol positionX = x; ^symbol: variable positionXlocation: class Block
Mögliche Fehlerursachen
- Variable wurde nicht definiert
- Name falsch geschrieben
- Fehlendes "new" beim Erstellen eines Objekts
Mögliche Lösungen
- Sichergehen, dass die genutzte Variable definiert wurde
- beim ersten Vorkommen einer Variable muss diese einen Datentyp haben
- Namen auf Schreibfehler überprüfen
Hinweis:
Die Suche kann dabei helfen, eine Variable und ihre Nutzung schneller wiederzufinden.
ERROR_cannot_find_symbol
class, interface, enum oder record erwartet
Auf Englisch: class, interface, enum, or record expected
class, interface, enum, or record expected } ^
Mögliche Fehlerursachen
- Zu viele geschweifte Klammern (})
Mögliche Lösungen
- Überschüssige Klammern entfernen
Hinweis:
Die überschüssigen Klammern befinden sich bei diesem Fehler meist am Ende des Codes. Eine angemessene Einrückung des Codes kann dabei helfen, den Fehler zu finden und zu vermeiden.
ERROR_class_expected
Klasse, Schnittstelle, Annotationstyp, Enumeration, Datensatz, Methode oder Feld erwartet
Auf Englisch: class, interface, annotation type, enum, record, method or field expected
class, interface, annotation type, enum, record, method or field expected
publi void begruessung(String name) {
^
Mögliche Fehlerursachen
- Fehlerhafte Modifier (
static,public, ...)
Mögliche Lösungen
- Modifier korrigieren oder entfernen
ERROR_class_interface_expected
Ungültige Methodendeklaration. Rückgabetyp erforderlich
Auf Englisch: invalid method declaration; return type required
invalid method declaration; return type required
begruessung(String name) {
^
Mögliche Fehlerursachen
-
Fehlender Rückgabetyp (
void,int,boolean...)
Mögliche Lösungen
- Rückgabetyp ergänzen
ERROR_invalid_method_declaration
abcKlasse <X> ist öffentlich und muss in einer Datei namens <X>.java deklariert werden
Auf Englisch: class <X> is public, should be declared in a file named <X>.java
class Block is public, should be declared in a file named Block.javapublic class Block {
^
Mögliche Fehlerursachen
- Klassenname entspricht nicht dem Namen der Datei
Mögliche Lösungen
- Angleichen der Namen
Hinweis:
Beim Umbenennen einer Klasse muss auch immer die entsprechende Datei umbenannt werden. 5Code ändert beim Umbenennen der Datei auch automatisch den Klassennamen.
ERROR_class_file_name
Doppeltes CASE-Label
Auf Englisch: duplicate case label
duplicate case label case 's': ausgabe = "Daten werden gespeichert"; ^
Mögliche Fehlerursachen
- Ein Fall im switch-case wird doppelt belegt.
Mögliche Lösungen
- Doppelten Case entfernenLiteral vom Case in einen unbenutzten umändern
Hinweis:
Achten Sie beim Kopieren und Einfügen aus anderer Stelle, den Code an allen relevanten Stellen anzupassen. (Bestenfalls vermeiden Sie Copy & Paste!)
ERROR_duplicate_case_label
"else" ohne "if"
Auf Englisch: 'else' without 'if'
'else' without 'if' else { ^
Mögliche Fehlerursachen
- Es wurde ein else-Zweig gefunden, der keiner if-Verzweigung zugewiesen werden kann ("dangling else").
Mögliche Lösungen
- Klammernsetzung überprüfen: mehrere Anweisungen unter if in einem Block ({}) zusammenfassen
- Leere Anweisungen (;) nach if entfernen
ERROR_else_without_if
Unzulässiger Ausdrucksbeginn/Typbeginn
Auf Englisch: illegal start of expression/type
illegal start of expression void dreheAufWinkel(int winkel) { ^illegal start of type return str; ^
Mögliche Fehlerursachen
- Klammern fehlen
- Methode steht innerhalb einer anderen Methode
- Aufruf steht außerhalb einer Methode
- Zugriffsmodifizierer (public, protected, private) innerhalb einer Methode
Mögliche Lösungen
- Klammernsetzung überprüfen
Hinweis:
Eine angemessene Einrückung des Codes kann dabei helfen, den Fehler zu finden und zu vermeiden. Die Fehlerursache kann mit großer Wahrscheinlichkeit in den voranstehenden Zeilen des Fehlers gefunden werden.
ERROR_illegal_start
Inkompatible Typen
Auf Englisch: incompatible types
incompatible types: String cannot be converted to int int a = "a"; ^incompatible types: possible lossy conversion from double to int int x = Math.pow(2,4); ^
Mögliche Fehlerursachen
- Variable wird ein Wert vom falschen Typ zugeordnet
Mögliche Lösungen
- Überprüfen, ob die Variable mit einer anderen verwechselt wurde
- Wert konvertieren (wenn möglich)
Hinweis:
Gleitkomma-Zahlen können auch in Integer umgewandelt werden, z.B. int pi = (int)3.14159.Dabei werden die Werte gerundet. Strings, die aus Zahlen bestehen, können auch umgewandelt werden, z.B. Integer.parseInt("500").
ERROR_incompatible_types
Ungültige Methodendeklaration. Rückgabetyp erforderlich
Auf Englisch: invalid method declaration; return type required
invalid method declaration; return type required public toString() { ^
Mögliche Fehlerursachen
- Fehlender Rückgabetyp in der Methodendeklaration
Mögliche Lösungen
- Passenden Rückgabetyp hinzufügen (void, int, String, ...)
Hinweis:
Auch wenn die Methode keinen Wert zurück gibt, muss sie explizit als "void" deklariert werden.
ERROR_return_type
Methode <x> ist bereits in Klasse <y> definiert
Auf Englisch: method <x> is already defined in class <y>
method toString() is already defined in class Block public String toString() { ^
Mögliche Fehlerursachen
- Methode mit diesem Namen und den gegebenen Parametern wurde in der Klasse bereits deklariert
Mögliche Lösungen
- Name der Methode ändern
- Typen und Anzahl der Parameter ändern
ERROR_method_already_defined
Methode <X> in Klasse <Y> kann nicht auf die angegebenen Typen angewendet werden
Auf Englisch: method <X> in class <Y> cannot be applied to given types
method positioniereAuf in class Block cannot be applied to given types; block.positioniereAuf(2); ^required: int,intfound: intreason: actual and formal argument lists differ in length
Mögliche Fehlerursachen
- Parameter der aufgerufenen Methode stimmen nicht mit der Definition überein
Mögliche Lösungen
- Parameter entsprechend der Definition anpassen (Anzahl und Typ)
Hinweis:
Die Fehlermeldung gibt im Detail an, welche Parameter erwartet werden und welche angegeben wurden. Die Suche kann dabei helfen, die Definition der Methode schneller wiederzufinden.
ERROR_cannot_be_applied_to_types
Rückgabeanweisung fehlt
Auf Englisch: missing return statement
missing return statement } ^
Mögliche Fehlerursachen
- Methode mit Rückgabetyp (nicht "void") gibt keinen Wert mit
- "return" zurück"return" wird nicht in jedem Fall aufgerufen (if-Verzweigung)
Mögliche Lösungen
- "return" mit entsprechendem Rückgabewert ans Ende der Methode setzen
- Verzweigungen darauf überprüfen, ob sie "return" aufrufen
Hinweis:
Werden unter bestimmten Bedingungen (if) verschiedene Werte zurückgegeben, müssen die anderen Bedingungen mit "else if" eingeleitet werden. Sonst kann der Compiler nicht sichergehen, dass in jedem Fall etwas zurückgegeben wird.
ERROR_missing_return
Variable <X> ist nicht statisch und kann nicht aus einem statischen Kontext referenziert werden
Auf Englisch: non-static variable <X> cannot be referenced from a static context
non-static variable name cannot be referenced from a static context name = "Alice"; ^
Mögliche Fehlerursachen
- In einer statischen Methode wird auf eine Instanz-Eigenschaft der Klasse zugegriffen.
Mögliche Lösungen
- Variable als static definieren
- Eine Instanz der Klasse erzeugen und diese ansprechen
ERROR_non_static_variable
Keine Anweisung
Auf Englisch: not a statement
not a statement abc ^
Mögliche Fehlerursachen
- Es ist keine gültige Anweisung vorhanden
Mögliche Lösungen
- Bei Methodenaufruf: mit () ergänzen
- Bei Variable: Zuweisung (z.B. = andereVariable) ergänzen
- Darauf achten, dass Kommentare als solche gekennzeichnet sind
ERROR_not_a_statement
Package <X> ist nicht vorhanden
Auf Englisch: package <X> does not exist
package aufgaben does not exist import aufgaben.*; ^package system does not exist system.out.println("Hello world"); ^
Mögliche Fehlerursachen
- Package-Name/-Pfad wurde falsch angegeben
- Klassenname wurde klein geschrieben, z.B. beim Aufruf von "System.out.println()"
Mögliche Lösungen
- Name und Position des importierten Packages überprüfen
- Kleinschreibung von Klassennamen beheben
ERROR_package_does_not_exist
Dateiende beim Parsen erreicht
Auf Englisch: reached end of file while parsing
reached end of file while parsing } ^
Mögliche Fehlerursachen
- Nicht alle Klammern werden wieder geschlossen
Mögliche Lösungen
- Fehlende Klammern ergänzen
Hinweis:
Eine angemessene Einrückung des Codes kann dabei helfen, den Fehler zu finden und zu vermeiden.
ERROR_end_of_file
Nicht geschlossenes Zeichenliteral
Auf Englisch: unclosed character literal
unclosed character literal char zeichen = 'a; ^
Mögliche Fehlerursachen
- char-Literal ist nicht abgeschlossen
- char-Literal enthält mehr als ein Zeichen
Mögliche Lösungen
- Abschließendes ' des char-Literals ergänzen
- Für mehrere Zeichen verwenden Sie den Datentyp String
ERROR_unclosed_character_literal
Nicht erreichbare Anweisung
Auf Englisch: unreachable statement
unreachable statement System.out.println(str); ^
Mögliche Fehlerursachen
- Codezeilen nach einem "return" oder "break" (innerhalb des selben Blocks)
Mögliche Lösungen
- Entsprechende Codezeilen vor "return" oder "break" setzen
ERROR_unreachable_statement
uses unchecked or unsafe operations
Note: [...]\Super.java uses unchecked or unsafe operations.
Wie kommt diese Warnung zustande?
- Nutzung Rawtype bei Generics
Wie kann ich diese Warnung lösen?
- Zuweisung eines Typs bei Nutzung von Generics
ERROR_unsafe_operations
Variable <x> wurde möglicherweise nicht initialisiert
Auf Englisch: variable <x> might not have been initialized
variable str might not have been initialized System.out.println(str);
^
Mögliche Fehlerursachen
- Variable wurde nicht initialisiert
- Variable wird nur unter bestimmten Bedingungen initialisiert
Mögliche Lösungen
- Variable vor Nutzung initialisieren
- Verzweigungen darauf überprüfen, ob Variable initialisiert wird
Hinweis:
Werden Variablen unter bestimmten Bedingungen (if) initialisiert, müssen die anderen Bedingungen mit "else if" eingeleitet werden. Sonst kann der Compiler nicht sichergehen, dass die Variable in jedem Fall initialisiert wird.
ERROR_var_not_initialized
Variable <x> ist bereits in Methode <y> definiert
Auf Englisch: variable <x> is already defined in method <y>
variable a is already defined in method main(String[]) int a = 9; ^
Mögliche Fehlerursachen
- Variable mit diesem Namen wurde im Block bereits deklariert
Mögliche Lösungen
- Name der Variable ändern
- Gültigkeitsbereiche der Blöcke prüfen
Hinweis:
Innerhalb eines Blocks sind gleiche Namen für Variablen nicht erlaubt, auch wenn sie unterschiedliche Typen haben.
ERROR_var_already_defined
<ID> erwartet
Auf Englisch: <identifier> expected
<identifier> expected System.out.println("Hello world");
^
Mögliche Fehlerursachen
- fehlerhafte Klammernsetzung
- Aufrufe stehen außerhalb einer Methode
Mögliche Lösungen
- Klammernsetzung überprüfen
- Aufrufe in eine Methode setzen (z.B. main())
Hinweis:
Eine angemessene Einrückung des Codes kann dabei helfen, den Fehler zu finden und zu vermeiden.
ERROR_identifier_expected
<X> erwartet
Auf Englisch: <X> expected
';' expected
position X = 0 ^
Mögliche Fehlerursachen
- Fehlendes Zeichen (z.B. ";" oder "{")
- fehlerhafte Klammernsetzung
Mögliche Lösungen
- Fehlendes Zeichen an die angegebene Stelle setzen
- Klammernsetzung überprüfen
ERROR_expected
<X> hat private-Zugriff in <Y>
Auf Englisch: <X> has private access in <Y>
name has private access in Person String name = person.name;
^
Mögliche Fehlerursachen
- Zugriff auf Instanzvariablen/-methoden, die eine private Sichtbarkeit haben
Mögliche Lösungen
- Bei Instanzmethoden: Sichtbarkeit passend ändern (public, protected, default)
- Bei Instanzvariablen: Diese sollen privat bleiben, der direkter Zugriff auf IV von außen muss vermieden werden. Versuchen Sie, Ihre Logik so anzupassen, dass kein direkter Zugiff nötig ist.
ERROR_private_access
<X> in <Y> ist veraltet
Auf Englisch: <X> in <Y> has been deprecated
[deprecation] stop() in Thread has been deprecated t.stop(); ^[removal] Integer(int) in Integer has been deprecated and marked for
removal Integer i = new Integer(5);
^
Wie kommt diese Warnung zustande?
- Es wurden Methoden oder Constructoren verwendet, die nicht mehr verwendet werden sollen. Diese sind in der API-Dokumentation als "deprecated" gekennzeichnet. Im Verlaufe der Entwicklung von Java wurden manche Methoden oder Constructoren überarbeitet oder mit besseren, sichereren Versionen oder mit andern Methoden ersetzt.
Wie kann ich diese Warnung lösen?
- Sehen Sie in der API-Dokumentation nach, welche bessere, sicherere Version Sie stattdessen verwenden sollen. Ggf. gibt es auch Hinweise in der Aufgabenstellung.
ERROR_deprecation
Ungültiger Operandentyp <X> für unären Operator "<Y>"
Auf Englisch: bad operand type <X> for unary/binary operator '<Y>'
bad operand type boolean for unary operator '++' bool++; ^
Mögliche Fehlerursachen
- Es wird versucht, einen Operator auf einen falschen Datentyp anzuwenden.
Mögliche Lösungen
- Prüfe, ob der Operator auf die richtige Variable angewendet wird.
- Prüfe, ob die Variable einen passenden Typen hat.
-
+,-,/,*,%lässt sich auf zwei Zahlentypen anwenden, z.B.3 + 5 -
!lässt sich auf boolean anwenden, z.B.!istZuSchnell -
++und--lässt sich auf Zahlentypen anwenden, z.B.i-- -
&,&&,|,||lässt sich auf boolean anwenden, z.B.istGross && istSchnell
ERROR_bad_operand
Nicht vergleichbare Typen: <X> und <Y>
Auf Englisch: incomparable types: <X> and <Y>
incomparable types: boolean and int boolean bool3 = bool == 8;
^
Mögliche Fehlerursachen
- Es wird versucht, die Werte von zwei Typen zu vergleichen, die sich nicht vergleichen lassen, z.B. boolean und int.
- Es lassen sich booleans untereinander vergleichen, sowie Zahlenwerte. Gemischt ist dies nicht möglich.
Mögliche Lösungen
- Prüfe, ob die richtigen Werte/Variablen verglichen werden.
- Prüfe, ob die zu vergeichenden Elemente den richtigen Typ haben.
ERROR_incomparable_types
Unbenannte Klassen sind ein Vorschaufeature, das standardmäßig deaktiviert ist.
Auf Englisch: unnamed classes are a preview feature and are disabled by default.
unnamed classes are a preview feature and are disabled by default. void hello() { ^
Mögliche Fehlerursachen
- Es wird eine Definition außerhalb der Klasse gefunden, die dort nicht hingehört.
Mögliche Lösungen
-
Prüfe, ob der darüberstehende Block nur einmal geschlossen wurde
(
}). - Prüfe, ob eine Methode ggf. falsch geschlossen wurde.
ERROR_unnamed_classes
Doppelte Klasse: X
Auf Englisch: duplicate class: X
duplicate class: Testclass Test {^
Mögliche Fehlerursachen
- Eine Klasse wurde falsch benannt.
Mögliche Lösungen
-
Prüfe, ob der Klassenname und der Dateiname gleich sind
(
Klassenname.java), und passe einen davon entsprechend an. - Prüfe, ob der Klassenname doppelt im Projekt verwendet wird. Dies kann ggf. passieren, wenn Dateien außerhab von 5Code in das Projekt kopiert werden.
ERROR_duplicate_class
Arraydimension fehlt
Auf Englisch: array dimension missing
array dimension missing int[] numbers = new int[];
^
Mögliche Fehlerursachen
- Es fehlt die Angabe der Größe beim Erstellen eines Arrays.
Mögliche Lösungen
- Ergänze die Länge des Arrays in den Klammern, z.B.
new int[5].
ERROR_array_dimension_missing
".class" erwartet
Auf Englisch: '.class' expected
'.class' expected this.zahl = int _zahl;
^
Mögliche Fehlerursachen
- Ein Datentyp wird falsch verwendet, z.B. bei der Zuweisung eines Wertes.
Mögliche Lösungen
-
Achte darauf, dass Datentypen bei der Definition einer Variable genutzt werden,
nicht bei der Zuweisung (also links vom
=). - Achte darauf, dass Datentypen bei der Definition von formalen Parametern genutzt werden, nicht in aktuellen Parametern.
ERROR_dot_class_expected
Kompakte Quelldatei weist keine Hauptmethode im Format "void main()" oder "void main(String[] args)" auf
Auf Englisch: compact source file does not have main method in the form of void main() or void main(String[] args)
void mains() {
^
Mögliche Fehlerursachen
- Es fehlt eine main()-Methode, die zum Ausführen des Programms benötigt wird.
Mögliche Lösungen
- Ergänze eine "void main()", wenn diese fehlt.
- Achte auf Tippfehler bei der Methode.
- Ggf. ist diese nicht die Java-Datei, die ausgeführt werden soll. Führe eine andere Datei mit "void main()" aus.
ERROR_compact_source_file_main
Laufzeit-Fehler
ArrayIndexOutOfBoundsException: <X>
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 4
out of bounds for length 2
Mögliche Fehlerursachen
- Versuchter Zugriff auf einen nicht vorhandenen Index in einem Array
Mögliche Lösungen
- Länge des Arrays überprüfen
- Berechnung des Index überprüfen
- Bedingung der Schleife überprüfen, die auf das Array zugreift
Hinweis:
Indizes eines Arrays gehen von 0 bis Array-Länge - 1.
ERROR_array_oob
ClassCastException: <X>
Exception in thread "main" java.lang.ClassCastException: class
java.lang.Integer cannot be cast to class java.lang.String (java.lang.Integer
and java.lang.String are in module java.base of loader 'bootstrap')
Mögliche Fehlerursachen
- Casting (Umwandeln) eines Objekts einer Klasse in ein Objekt einer anderen Klasse schlägt fehl, da die Typen inkompatibel sind
Mögliche Lösungen
- Rückgabetyp von verwendeten Methoden überprüfen (geben diese zurück, was erwartet wird)
- Nachschlagen, welche Typen zueinander kompatibel sind
- Überprüfen von Vererbungsstrukturen der relevanten Klassen
- Vermeiden von nicht typisierten Collections (Rawtype)
ERROR_class_cast
NullPointerException
Exception in thread "main" java.lang.NullPointerException
Mögliche Fehlerursachen
-
Versuchter Zugriff auf ein Element ohne Wert (null), z.B.
- Zugriff auf Array-Element dessen Wert null ist
- Abfrage der Länge eines Arrays dessen Wert null ist
- Aufruf von Methoden auf eine Variable mit dem Wert null
Mögliche Lösungen
- Überprüfen, dass die referenzierten Werte/Variablen gesetzt sind
- Abfrage ob Variable ungleich null ist, bevor Operationen ausgeführt werden
ERROR_null_pointer
StringIndexOutOfBoundsException: <X>
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String
index out of range: -1Exception in thread "main" java.lang.StringIndexOutOfBoundsException: begin 0,
end 4, length 1
Mögliche Fehlerursachen
- Versuchter Zugriff auf einen nicht vorhandenen Index in einem String
Mögliche Lösungen
- Länge des Strings überprüfen
- Berechnung des Index überprüfen
- Bedingung der Schleife überprüfen, die auf den String zugreift
Hinweis:
Indizes eines Strings gehen von 0 bis String-Länge - 1.
ERROR_string_oob
by zero
Exception in thread "main" java.lang.ExceptionInInitializerError Caused by:
java.lang.ArithmeticException: / by zero
Mögliche Fehlerursachen
- Mathematische Operation: Teilen durch 0
Mögliche Lösungen
- Werte der Variablen beteiligt an der Division überprüfen
- Berechnung in einen try/catch-Block umfassen
ERROR_divide_by_zero