home  |  suche  |  kontakt/johner  |  institut 
studierende  |  tech-docs  |  mindmailer 

Fehlerbehandlung

Fehler können entweder mit try-catch gefangen werden oder weitergeworfen werden. Fehler können in verschiedene Kategorien eingeteilt werden. Man unterscheidet zwischen Error und Exception. Error hängen mit der Java Virtual Machine zusammen. Diese können im Java Code nicht behandelt werden.

Runtime Exceptions müssen nicht explizit behandelt werden, weil es sich hierbei um Laufzeitfehler handelt, die während des Programmverlaus auftreten. Die Kategorie vereint alle Fehler, die auf Grund eines Programmierfehlers auftreten können. Dazu gehören unter anderem die folgenden Fälle

  • fehlerhafte Typkonvertierung (ClassCastException)
  • Zugriff über die Arraygrenze hinaus
  • Zugriff auf einen leeren Zeiger.

Alle nicht von RuntimeException abgeleiteten Klassen repräsentieren Fehler, die sich durch ungünstige Umstände und nicht etwa durch fehlerhaften Code ergeben. Beispiele dafür sind folgende Gegebenheiten.

  • Fehler beim Lesen einer Datei
  • ungenügend Systemressourcen
  • Fehlfunktion externer Dienste

Beim Fangen von Fehlern, darf nach einem try mehrere catch-Blöcke stehen. Dabei gilt, dass die catch Blöcke in aufsteigender Reihenfolge (von speziell zu allgemein) hintereinander stehen müssen. Außerdem ist es möglich einen finally-Block nach den catch-Blöcken einzufügen. Dieser Block wird immer ausgeführt, unabhängig von der Art des Fehlers. Der finally-Block darf damit auch nur mit einem try-Block stehen.


Weitere Merkregeln die bei der Fehlerbehandlung beachtet werden müssen:

  • keinen leeren catch-Block schreiben
  • den Fehler so nah am Ort des Auftretens behandeln wie möglich
  • Beachte - auch in einem catch Block können Fehler auftreten
  • werfe den Fehler so spezifisch wie möglich - z.B. werfe FileNotFoundException anstelle von IOException
  • die bereits bestehenden Exceptions (ca. 200 in Java) nutzen, bevor eigene Exceptions geschrieben werden (eigene Fehlerobjekte erzeugen ist sehr aufwändig)
  • nicht von Error erben (Errors kann man meist nicht fangen, sie haben etwas mit der JVM zu tun)

 

Nützlicher Link:
http://www.java-tutorial.org/exception-handling.html