Skip to Content

4 Programmablauf bei Ausnahmen

Das folgende Javaprogramm wirft eine ArithmeticException wegen einer Division durch Null in der Methode divide().

Welche Konsolenausgaben erzeugt das Programm wegen seiner System.out.println() Aufrufe?

Das Beispielprogramm:

package Kurs2.Exception;

public class Frage1 {

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:before");
}

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

static int divide(int a, int b) {
int d;
System.out.println("divide:before");
d = a / b;
System.out.println("divide:after");
return b;
}
}

Niveau 2
Schwierigkeitsgrad mittel
Zeit 4 Minuten

 

Antwort zu Frage 3: Erkennen von Ausnahmen im Quellcode

public class Ausnahme {
  
   public static void main(String[] args) {
      int a = 5; int b = 0;
      int c = 0;
      System.out.println("main:Anfang"); // 1
      c = divAussen(a, b);
      System.out.println("main:Ende"); // 7
   } // Ende von main
  
   static int divAussen(int a, int b) {
      int d;
System.out.println("divAussen:Anfang"); // 2
try {
d = 2 * divInnen(a, b);
} catch (ArithmeticException e) {
System.out.println("divAussen: Division durch Null");
d = -2;
}
System.out.println("divAussen:Ende"); // 6
return d;
} // Ende von divAussen

static int divInnen(int a, int b) {
int d;
System.out.println("divInnen:Anfang"); // 3
try {
d = a / b; // Hier tritt eine Ausnahme auf
} catch (IllegalArgumentException e) {
System.out.println("divInnen: Division durch Null");
d = -1;
} catch (RuntimeException e) {
System.out.println("divInnen: Division durch Null;" + " RuntimeException"); // 4
d = -2;
}
System.out.println("divInnen:Ende"); // 5
return d;
} // Ende von divInnen
} // Ende der Klasse.

Comments

Ablauf

Hallo,

ich bin von dem "feuern" von "IllegalArgumentException" verwirrt.
Laut Definition dürfte es doch bei einer Division durch 0 gar nicht zu einer solchen kommen (4), nur bei einer "ArithmeticException".

Wenn ich das Programm laufen lasse gibt es mir auch folgende Ausgaben:
run:
main:Anfang (1)
divAussen:Anfang (2)
divInnen:Anfang (3)
divInnen: Division durch Null; RuntimeException (4)
divInnen:Ende (5)
divAussen:Ende (6)
main:Ende (7)
BUILD SUCCESSFUL (total time: 0 seconds)

... es kommt also nach (3) zu keiner IllegalArgumentException.

Es fehlt in ihrer Lösung auch "divInnen:Ende (5)"

MfG .. Norman WIBI 12B

Richtig

Gut beobachtet,
Fehler wurde korrigiert.
Die Konsolenausgaben sind:
main:Anfang
divAussen: Anfang
divInnen: Anfang
divInnen: Division durch Null; RuntimeException
divInnen: Ende
divAussen: Ende
main: Ende



blog | by Dr. Radut