Einleitung
Java ist eine der beliebtesten und gefragtesten Programmiersprachen. Auf dem Weg zur Meisterschaft machen Anfänger jedoch häufig typische Fehler, die die Entwicklung verlangsamen und zu schwer auffindbaren Bugs führen. In diesem Artikel analysieren wir die 10 häufigsten Fehler von Java-Anfängern. Sie erfahren, wie Sie diese erkennen, beheben und – am wichtigsten – in Zukunft vermeiden können. Das Material ist sowohl für Studenten als auch für diejenigen nützlich, die gerade erst ihren Weg mit Java beginnen.
1. Verwechslung von == und equals()
Dies ist wohl der häufigste Fehler. Der Operator == vergleicht Objektreferenzen (prüft, ob die Variablen auf dasselbe Objekt im Speicher verweisen), während die Methode .equals() den Inhalt der Objekte vergleicht.
Beispiel für den Fehler:
String a = new String("Hello");String b = new String("Hello");if (a == b) { System.out.println("Strings sind gleich");} else { System.out.println("Strings sind NICHT gleich");}// Ausgabe: Strings sind NICHT gleichRichtige Vorgehensweise:
if (a.equals(b)) { System.out.println("Strings sind gleich");}// Ausgabe: Strings sind gleichTipp: Verwenden Sie immer .equals() zum Vergleichen von Strings, Objekten und Collections. Verwenden Sie == nur für primitive Typen (int, char, boolean) oder wenn Sie explizit prüfen müssen, ob es sich um dasselbe Objekt handelt.
2. Ignorieren von NullPointerException (NPE)
NullPointerException ist der Fluch aller Java-Entwickler. Sie tritt auf, wenn Sie versuchen, eine Methode aufzurufen oder auf ein Feld eines Objekts zuzugreifen, das null ist.
Beispiel für den Fehler:
public class User { String name; public int getNameLength() { return name.length(); // Wenn name == null, gibt es NPE }}So vermeiden Sie es:
- Überprüfen Sie Objekte vor der Verwendung immer auf
null:if (name != null). - Verwenden Sie
Optional<T>(Java 8+), um explizit zu kennzeichnen, dass ein Wert fehlen kann. - Nutzen Sie die Annotationen
@Nullableund@NotNull(z. B. von Lombok oder IntelliJ).
public int getNameLength() { return (name != null) ? name.length() : 0;}3. Falsche Ausnahmebehandlung
Anfänger "schlucken" Ausnahmen oft (schreiben einen leeren catch-Block) oder verwenden einen zu allgemeinen catch (Exception e).
Was man NICHT tun sollte:
try { // gefährlicher Code} catch (Exception e) { // nichts tun}Richtige Vorgehensweise:
- Fangen Sie spezifische Ausnahmen (z. B.
IOException,SQLException). - Protokollieren Sie den Fehler im
catch-Block oder geben Sie ihn zumindest auf der Konsole aus (e.printStackTrace()oder über einen Logger). - Verwenden Sie try-with-resources zum automatischen Schließen von Ressourcen (Dateien, Datenbankverbindungen).
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) { String line; while ((line = br.readLine()) != null) { System.out.println(line); }} catch (IOException e) { System.err.println("Fehler beim Lesen der Datei: " + e.getMessage());}4. Vergessen von StringBuilder bei der String-Verkettung in Schleifen
Strings in Java sind unveränderlich. Jedes Mal, wenn Sie den Operator + für Strings verwenden, wird ein neues String-Objekt erstellt. In einer Schleife führt dies zu einer großen Anzahl temporärer Objekte und einem Leistungsabfall.
Schlechtes Beispiel:
String result = "";for (int i = 0; i < 1000; i++) { result += "Zahl " + i + ", ";}Gutes Beispiel:
StringBuilder sb = new S