Einleitung: Warum selbst Genies in Java Fehler machen?
\n\nJava ist eine strenge, aber dankbare Sprache. Anfänger stolpern jedoch oft über die gleichen Hürden. Laut Stack Overflow-Statistiken hängen 70% der Fragen von Java-Anfängern mit fünf klassischen Fehlern zusammen. In diesem Artikel haben wir die „Top Fehler von Java-Anfängern: Von A bis Z“ zusammengestellt – von der Verwechslung von == bis zur falschen Speicherverwaltung.
Wir werden jedes Problem anhand von Beispielen analysieren, damit Sie sich nicht nur die Regel merken, sondern ihr Wesen verstehen. Los geht's!
\n\n1. Fehler Nr. 1: „==“ statt equals() – ein Klassiker
\n\nDer häufigste Fehler ist der Vergleich von Strings mit ==. Anfänger denken, dass das funktioniert, und wundern sich dann, warum "Java" == "Java" false ergibt.
Warum passiert das?
\n- \n
==vergleicht Objektreferenzen (Speicheradressen). \n equals()vergleicht den Inhalt von Objekten. \n
Beispiel:
\n\nString a = new String("Java");\nString b = new String("Java");\n\nSystem.out.println(a == b); // false – unterschiedliche Objekte im Heap\nSystem.out.println(a.equals(b)); // true – gleicher Inhalt\n\n\nTipp: Verwenden Sie für Strings immer .equals(). Für primitive Datentypen (int, double) funktioniert == korrekt.
2. Fehler Nr. 2: NullPointerException vergessen
\n\nNullPointerException (NPE) ist der schlimmste Feind eines Junioren. Sie tritt meistens auf, wenn Sie eine Methode auf null aufrufen.
Typisches Szenario:
\n\npublic String getName(User user) {\n return user.getName().toUpperCase(); // Wenn user == null – NPE!\n}\n\n\nWie beheben? Verwenden Sie defensive Programmierung:
\n\npublic String getName(User user) {\n if (user == null) {\n return "Unbekannt";\n }\n return user.getName().toUpperCase();\n}\n\n\nOder, ab Java 8, Optional:
public String getName(User user) {\n return Optional.ofNullable(user)\n .map(u -> u.getName().toUpperCase())\n .orElse("Unbekannt");\n}\n\n\n3. Fehler Nr. 3: Ausnahmen ignorieren
\n\nLeere catch-Blöcke sind ein Anti-Pattern. Der Fehler verschwindet nicht, Sie verstecken ihn nur.
Schlechter Code:
\n\ntry {\n int result = 10 / 0;\n} catch (ArithmeticException e) {\n // Wir tun nichts – der Fehler wird still geschluckt\n}\n\n\nGuter Code:
\n\ntry {\n int result = 10 / 0;\n} catch (ArithmeticException e) {\n System.err.println("Division durch Null Fehler: " + e.getMessage());\n // Oder die Ausnahme weiterwerfen\n throw new RuntimeException("Kritischer Fehler", e);\n}\n\n\n4. Fehler Nr. 4: Falsche Arbeit mit Collections
\n\nAnfänger verwechseln oft List, Set und Map und vergessen außerdem Generics.
Typische Fehler:
\n\n- \n
- Verwendung von rohen Typen (raw types) –
List list = new ArrayList();\n - Ändern einer Collection während der Iteration ohne
Iterator.remove()\n - Ersetzen von
HashMapdurchTreeMapohne Verständnis des Unterschieds \n
Richtiger Ansatz:
\n\nList<String> names = new ArrayList<>();\nnames.add("Alice");\nnames.add("Bob");\n\n// Löschen während der Iteration\nIterator<String> iterator = names.iterator();\nwhile (iterator.hasNext()) {\n String name = iterator.next();\n if (name.equals("Alice")) {\n iterator.remove(); // Sicher\n }\n}\n\n\n5. Fehler Nr. 5: Speicherleck und falsches Schließen von Ressourcen
\n\nSie vergessen, Scanner, FileInputStream oder eine Datenbankverbindung zu schließen.