Ist eine ArithmeticException eine geprüfte Ausnahme?

Eine gute Antwort wäre:

Nein.

Beispielprogramm

Hier ist ein Beispielprogramm. Beachten Sie, dass die methodeA zwei try/catch-Strukturen hat. (Sie könnte auch nur mit einer geschrieben werden.)

import java.io.* ;

public class SchwarzenPeterWeiterrreichen
{
  public static int methodeB( int divisor )  throws ArithmeticException
  {
    int ergebnis = 12 / divisor;  // könnte eine ArithmeticException auslösen
    return ergebnis;
  }

  public static void methodeA( String input )
  {
    int zahl = 0;

    try
    {
      zahl = Integer.parseInt( input ); // könnte eine NumberFormatException auslösen
    }
    catch ( NumberFormatException falscheDaten )
    {
      System.out.println( "Falsche Eingabedaten!!" );
      falscheDaten.printStackTrace();
      return;   // das ist notwendig damit nicht der nächste
                // try-Block die Kontrolle bekommt
    }

    try
    {
      System.out.println( "Das Ergebnis ist: " + methodeB( zahl ) );
    }
    catch ( ArithmeticException nullDivision )
    {
      System.out.println( "Division durch Null!!" );
      nullDivision.printStackTrace();
    }

  }

  public static void main ( String[] a ) throws IOException
  {
    BufferedReader stdin =
        new BufferedReader ( new InputStreamReader( System.in ) );

    String  inData = "";
    System.out.println("Geben Sie den Divisor ein:");
    inData = stdin.readLine();

    methodeA( inData );
    System.out.println("weiter mit main...!");
  }
}

Die Klausel "throws ArithmeticException" im Header der methodeB() ist nicht erforderlich, da ArithmeticException ungeprüft ist. Wenn der Anwender einen String "0" eingibt, dann

main() ruft methodeA
methodeA ruft methodeB
methodeB verursacht eine ArithmeticException bei einer Division durch Null

methodeB reicht die Ausnahme zurück an methodeA
methodeA fängt die Ausnahme auf und gibt "Division durch Null!!" aus
Kontrolle kehrt zurück zu main() (die "weiter mit main...!" ausgibt.)

Kopieren Sie das Programm nach Notepad, speichern, kompilieren und führen Sie es aus. Experimentieren Sie ein bisschen damit. Ausnahmebehandlung ist etwas knifflig; und ein wenig Übung wird Ihnen für später helfen.

FRAGE 9:

Nun einmal angenommen, dass der Anwender "Unsinn" eingibt. Was passiert jetzt?

main() ruft methodeA
___________________________________
___________________________________
___________________________________
___________________________________
Kontrolle kehrt zu main() zurück.
Inhaltsverzeichnis