Fehlerbehandlung

In diesem Teil des Kurses soll es um die Behandlung von Fehlern gehen. Diese sind in der Programmierung allgegenwärtig, deshalb kümmert man sich um die Fehler, bevor sie entstehen. Zunächst gilt es dabei zwischen zwei verschiedenen Arten von Fehlern zu unterscheiden. Zum einen gibt es Compilerfehler, also Fehler die verursachen, dass das Programm nicht kompiliert werden kann. Diese Fehler hängen oft mit einer fehlerhaften Syntax zusammen. Ein Beispiel dafür kann ein vergessenes Semikolon oder eine vergessene Klammer sein. Der „Vorteil“ von diesen Fehlern, ist der, dass sie relativ leicht zu beheben sind. In Eclipse und anderen IDE’s sind diese besonders leicht zu finden, da dir ein vergessenes Semikolon noch vor dem kompilieren in Rot angezeigt wird. Die zweite Art von Fehlern in der Programmierung sind Laufzeitfehler. Diese Fehler sind leider etwas schwerer zu beheben, da sie oft nicht auf den ersten Blick ersichtlich sind. Auch wenn dir moderne IDE's die Zeile anzeigen, in welcher der Fehler entstanden ist, so ist trotzdem oft einige Suche nach der genauen Ursache nötig.
Schau dir beispielsweise diesen Code an:

int[] zahlen = {2};
System.out.println(zahlen[1]);

// Listing 11.1 Fehlerhafter Code
Dieser Code erzeugt eine java.lang.ArrayIndexOutOfBoundsExceptionjava.lang.ArrayIndexOutOfBoundsException, probiere es gerne einmal aus. Der Grund ist dir bestimmt schon aufgefallen: Das Array zahlen hat nur eine Stelle im Array, wir greifen aber auf die zweite Stelle zu, da die Zählung bei null beginnt. Das erzeugt die Fehlermeldung. Dieser Fehler lässt sich natürlich einfach vermeiden indem wir den Index verändern. In besonderen Fällen ist vorher allerdings unklar, ob ein Fehler geworfen wird oder nicht. Dafür gibt es in Java das try-catch Konstrukt:
try {
  int[] zahlen = {2};
  System.out.println(zahlen[1]);
} catch (ArrayIndexOutOfBoundsException e) {
    System.out.println("Etwas ist schief gelaufen");
}

// Listing 11.2 Try-Catch
Zunächst wird in dem try-Block der Code geschrieben, der idealerweise ausgeführt werden soll. Der catch-Block ist dafür zuständig, eventuelle Fehler abzufangen und entsprechend zu reagieren. Dazu gibt man den Fehler an, welcher abgefangen werden soll. In unserem Fall also eine ArrayIndexOutOfBoundsExceptionArrayIndexOutOfBoundsException. Solltest du dir unsicher sein, welchen Fehler du abfangen willst, gibt es auch die Möglichkeit einfach alle potentiellen Fehler abzufangen, dazu benutzt du einfach anstatt der ArrayIndexOutOfBoundsExceptionArrayIndexOutOfBoundsException eine normale ExceptionException.

Zusammenfassung

  • Die Fehlerbehebung ist ein wichtiger Teil der Programmierung
  • Es gibt Laufzeit- und Compilerfehler
  • Laufzeitfehler treten erst dann auf, wenn das Programm schon läuft
  • Compilerfehler treten bereits dann auf, wenn das Programm kompiliert wird
  • Laufzeitfehler können durch ein try-catch Konstrukt abgefangen und behandelt werden
Kommentieren Kommentare