Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
programmierung:exceptions [2024/08/30 15:04] sweprogrammierung:exceptions [2025/12/20 14:53] (current) – external edit 127.0.0.1
Line 1: Line 1:
-Exceptions+====== Exceptions ====== 
  
 Exceptions sind besondere Ereignisse oder Fehler, die während der Ausführung eines Programms auftreten und den normalen Ablauf des Programms unterbrechen.  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: Dabei gibt es eine ''try catch''-Syntax:
Line 8: Line 10:
 Sollte dieser Versuch eine Ausnahme ''Exception'' auslösen, wird diese abgefangen (''catch''), ohne dass das Programm abstürzt. Sollte dieser Versuch eine Ausnahme ''Exception'' auslösen, wird diese abgefangen (''catch''), ohne dass das Programm abstürzt.
  
 +==== Beispiel ArrayIndexOutOfBoundsException  ====
  
-<code java  [enable_line_numbers="true",highlight_lines_extra="0",enable_keyword_links="false"]| File.java>+ 
 +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) 
 +<code java  [enable_line_numbers="true",highlight_lines_extra="0",enable_keyword_links="false"]>
  
 public class ExceptionExample { public class ExceptionExample {
Line 25: Line 37:
 </code> </code>
  
-In diesem Beispiel:+==== 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.
  
-- **try**: Der Codeblock, der möglicherweise eine Ausnahme auslöst. +Was würde aber passierenwenn 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.
-- **catch**: Der Codeblock, der die Ausnahme behandelt.+
  
 +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.
 +
 +<code java  [enable_line_numbers="true",highlight_lines_extra="0",enable_keyword_links="false"]| 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();
 +            }
 +        }
 +    }
 +}
 +</code>