Frage zu Übungsaufgabe



  • Hallo,
    ich habe eine Übungsaufgabe mit die ich nicht verstehe kann mir das bitte jemand erklären.
    Aufgabe:
    Stellen Sie sich vor, Sie wollen an einer Stelle Ihres Programms alle möglichen auftretenden Exceptions und RuntimeExceptions behandeln. Welche von den beiden Ausnahmen müssen Sie zuerst abfangen - die vom Typ Exception oder die vom Typ RuntimeException

    Meine Lösung wäre folgende:
    Ich fange zuerst die RuntimeException ab weil RuntimeException von Exception erbt und wenn ich zuerst Exception abfange wird der catch-block für RuntimeException nie erreicht

    try{
    //mach Irgendwas
    }
    catch (RuntimeException runex){}
    catch (Exception ex){}
    

    die Musterlösung machts aber genau anders herum. Hab ich die Aufgabe oder die Exceptions nicht verstanden? 🙄

    /*
     * "Grundkurs Programmieren in Java - Band 1 (3. Auflage, 2006)I"
     * 2001-2006, Carl Hanser Verlag
     * Loesungsvorschlag zu Aufgabe (Version 3.0)
     * (c) 2001-2006 D. Ratz, J. Scheffler, D. Seese, J. Wiesenberger
     *
     */
    
    public class ExceptionTest {
    
      public static void main (String[] args) {
        try {
          // mache irgendwas
        }
        catch (Exception ex) {
          System.out.println( "Exception abgefangen! " );
        }
        catch (RuntimeException ex) {
          System.out.println( "RuntimeException abgefangen!" );
        }
    
      }
    
    }
    

    Das ganze ist aus dem "Grundkurs Programmieren in Java - Band 1"

    Gruß

    eiskalt



  • Ich denke dein Code müsste stimmen und die Lösung ist falsch.

    Die Lösung im Buch ist wenig sinnvoll, da das catch( RuntimeException ) sowieso nie erreicht wird, da RuntimeException tiefer in der Vererbungshierarchie liegt als Exception. Sollte sogar einen compilation error geben mit "Unreachable code" oder sowas.

    Als goldene Regel:
    Die catch-Klauseln immer so anordnen, dass Klassen, die zu oberst in der Vererbungshierarchie am Schluss kommen.



  • na gott sei Dank und ich dachte schon ich bin blöde 😃

    THX


Anmelden zum Antworten