Table of Contents

Exceptions

Exceptions sind besondere Ereignisse oder Fehler, die während der Ausführung eines Programms auftreten und den normalen Ablauf des Programms unterbrechen.

try und catch

Dabei gibt es eine try catch-Syntax:

Es wird versucht (try) eine Anweisung auszuführen.\ Sollte dieser Versuch eine Ausnahme Exception auslösen, wird diese abgefangen (catch), ohne dass das Programm abstürzt.

Beispiel ArrayIndexOutOfBoundsException

Im Beispiel wird in Zeile 5 auf Element Nr.6 des Array numbers zugegriffen. Um genauer zu sein, wird nur versucht, dies zu tun.

Da numbers nur 3 Elemente groß ist, wird eine ArrayIndexOutOfBoundsException ausgelöst, die ohne Behandlung das Programm beenden würde.

Hier kommt jedoch der catch-Block ins Spiel:\ Dieser Block nimmt die Exception an und beruhigt die Wogen. Die Exception wird abgefangen und das Programm stürzt nicht mehr ab. Vielmehr bleibt Zeit, eine Ausgabe zu senden oder andere Anweisungen auszuführen.

(Natürlich ist im Beispiel nach durchlaufen des Codes das Programm beendet. Aber eben normal beendet. Das Programm ist nicht abgestürzt)

public class ExceptionExample { public static void main(String[] args) { try { int[] numbers = {1, 2, 3}; System.out.println(numbers[5]); // Dies wird eine ArrayIndexOutOfBoundsException auslösen } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Index ist außerhalb des Bereichs des Arrays!"); } finally { System.out.println("Dies wird immer ausgeführt, egal ob eine Ausnahme auftritt oder nicht."); } } } 

==== Beispiel Kombination aus Exception und while-Schleife ==== Schau Dir nun das folgende Beispiel an. Hier wird der User aufgefordert, eine Ganzzahl einzugeben. Soweit, so gut.

Was würde aber passieren, wenn der User statt einer Zahl seinen Namen eingibt? Richtig - das Programm würde mit Pauken und Trompeten crashen! Es wird durch unsere Wahl sc.nextInt() eine Ganzzahl gefordert und nichts anderes.

Unser try - catch-Block fängt nun wiederum dieses Missmatch ab und sorgt dafür, dass das Programm nicht abstürzt, sondern eine Fehlermeldung an den User geschickt wird. Gleichzeitig lösche es mit sc.next() die Eingabe aus dem Scanner.

Beachte, dass der Code unmittelbar mit werfen der Exception in den catch-Block springt und die break-Anweisung überspringt. Somit verbleiben wir in der while-Loop.

Da der ganze try-catch-Block in eine while-Schleife eingebettet ist, geht das ganze Spiel wieder von vorne los.

Erst wenn die Eingabe durch den Scanner akzeptiert wurde, erreicht der Code das break in Zeile 13 und die while-Schleife wird wieder verlassen.

File.java

 import java.util.Scanner;
 
public class Main {
 
 
  public static void main(String[] args) {
      Scanner sc = new Scanner (System.in);
      int zahl1 = 0;
 
      while (true) {
          try {
              System.out.print("Bitte erste Zahl eingeben ");
              zahl1 = sc.nextInt();    
              break;    
          } catch (Exception e) {
              System.out.println("Das war keine Zahl. Bitte nochmal.");
              sc.next();
          }
      }
  }
 
}