"Grundkurs Programmieren in Java - Band 1 (3. Auflage, 2006)"
2001-2007, Carl Hanser Verlag

Lösungsvorschlag zu Aufgabe 13.8 (Version 4.0)

(c) 2001-2007 D. Ratz, J. Scheffler, D. Seese, J. Wiesenberger

Es gilt folgende Vererbungs-Hierarchie:
java.lang.Object
  |
  +--java.lang.Throwable
        |
        +--java.lang.Exception
              |
              +--java.lang.RuntimeException
Jede RuntimeException ist also auch eine Exception (aber nicht umgekehrt). Schreiben wir also
    try {
      // mache irgendwas
    }
    catch (Exception ex) {
      System.out.println( "Exception abgefangen! " );
    }
    catch (RuntimeException ex) {
      System.out.println( "RuntimeException abgefangen!" );
    }
so würde schon der erste catch-Block auch eine RuntimeException abfangen, weshalb wir beim Compiler-Aufruf folgende Fehlermeldung erhalten:
  E:\hiwi\temp>javac ExceptionTest.java
  ExceptionTest.java:18: exception java.lang.RuntimeException has already been cau
  ght
      catch (RuntimeException ex) {
      ^
  1 error
Wir müssen also immer zuerst die weiter unten in der Hierarchie stehende Exception abfangen!

Quelltext: ExceptionTest.java