05.04 Cannot find symbol
Jedes Mal, wenn der Compiler einen bestimmten Teil Ihres Codes nicht finden kann, wirft er beim Kompilieren den Fehler cannot find symbol
. Dies tritt z. B. dann auf, wenn auf eine Klasse zugegriffen wird, die nicht importiert ist, eine Variable verwendet wird, die zuvor nicht deklariert wurde, oder eine Methode aufgerufen werden soll, die nicht existiert.
Wenn Sie versuchen diese Klasse zu kompilieren
public class Test { public static void main(String[] args) { ArrayList<String> list = new ArrayList<String>(); System.out.println(i); "asdf".doSomethingCool(); } }
erhalten Sie folgende Fehlermeldung vom Compiler:
Test.java:4: cannot find symbol
symbol : class ArrayList
location: class Test
ArrayList<String> list = new ArrayList<String>();
^
Test.java:4: cannot find symbol
symbol : class ArrayList
location: class Test
ArrayList<String> list = new ArrayList<String>();
^
Test.java:5: cannot find symbol
symbol : variable i
location: class Test
System.out.println(i);
^
Test.java:6: cannot find symbol
symbol : method doSomethingCool()
location: class java.lang.String
"asdf".doSomethingCool();
^
4 errors
Die Fehler in Zeile 4 resultieren daraus, dass die Klasse java.util.ArrayList
nicht importiert wurde. In Zeile 5 wird gemeckert, dass die Variable i
nicht gefunden werden kann, und in Zeile 6 wird eine Methode aufgerufen, die nicht existiert.
Bei den Werten in eckigen Klammern handelt es sich um Generics. Diese werden erst später im Buch besprochen, sind für den Fehler aber nicht bedeutsam.
Fehlerbehebung
Um das Problem zu lösen, müssen Sie sich zuerst ansehen, was nicht gefunden wurde (der Wert nach „symbol :“ in der Fehlermeldung). Anschließend überprüfen Sie, warum der Compiler diesen Wert nicht finden konnte. Überprüfen Sie, ob alle Klassen importiert wurden. Testen Sie auch, ob evtl. eine falsche Klasse mit einem identischen Namen importiert wurde. Kontrollieren Sie die exakte Schreibweise und den Gültigkeitsbereich ihres Zugriffs. Testen Sie auch, ob der Classpath richtig gesetzt wurde.