9 Programmablauf bei mehreren catch Blöcken

Submitted by javafrage on Fri, 01/25/2013 - 09:20

Hier werden in der Methode divide() mehrere Ausnahmebehandlungen (catch Blöcke) zu dem gegebenen try Block angeboten. Welche Blöcke werden ausgeführt und warum? Wie sieht die Konsolenausgabe aus?

package s1.block10;

public class Frage9{
   public static void main(String[] args) {
      int a = 5;
      int b = 0;
      int c = 0;
      System.out.println("main:before");
      c = doubleDiv(a, b);
     System.out.println("main:after");
   }

   static int doubleDiv(int a, int b) {
      int d;
      System.out.println("doubleDiv:before");
      try {
         d = 2 * divide(a, b);
      } catch (RuntimeException e) {
         System.out.println("doubleDiv: RuntimeException");
         d = -2;
     }
     System.out.println("doubleDiv:after");
     return d;
   }

   static int divide(int a, int b) {
      int d;
      System.out.println("divide:before");
      try {
         d = a / b;
      } catch (IllegalArgumentException e) {
         System.out.println("divide: IllegalArgumentException");
         d = -1;
     } catch (ArithmeticException e) {
        System.out.println("divide: ArithmeticException");
        d = -2;  
     } catch (RuntimeException e) {
        System.out.println("divide: RuntimeException");
        d = -3;
     }
     finally {
        System.out.println("divide: geschafft");
     }
     System.out.println("divide:after");
     return d;
   } // ende main()
} // Ende Klasse

Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).

Niveau 2
Schwierigkeitsgrad mittel
Zeit 6 Minuten

Antwort zu Frage 8: Programmablauf bei mehrern try-catch-Blöcken

Der try-catch Block in divide() wird nicht ausgeführt da keine IllegalArgumentException vorliegt. Erst der try-catch Block in der äusseren Methode doubleDiv() kommt zum Zug. Der letzte Dokumentationsaufruf in divide() wird daher nicht aufgerufen.

main:before
doubleDiv:before
divide:before
doubleDiv: Division durch Null
doubleDiv:after
main:after