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.

Previous Article
Next Article

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.