# 133 Kap. 12 Ausnahmebehandlung Exception Handling # 134 Beispiel 1: Person() { try { byte[] eingabe = new byte [80]; System.out.print ("\nNachnamen: "); System.in.read (eingabe); name = new String (eingabe); eingabe = new byte[80]; System.out.print ("\nVornamen: "); System.in.read (eingabe); vorname = new String (eingabe); } catch (IOException e){ System.out.println ("Eingabefehler"); System.exit(1); } } Harms: "SoftwareEntwicklung", SWENT, WS 2001/02 - 67 - # 135 Beispiel 2: try { String eingabeN; System.out.println ("Anzahl: "); eingabeN = buffer.readLine(); try { n = Integer.parseInt(eingabeN); } catch (NumberFormatException nFExcept){ System.out.println (nFExcept.toString()); System.exit(1); } } catch (IOException ioexcept){ System.out.println (ioexcept.toString()); System.exit(1); } #136 generelle Struktur einer try-Anweissung: try { ..... // // // // try-Block, d.h. normaler Code bei Fehler wird mit throw eine Instanz der entsprechenden ExceptionKlasse geworfen. } catch (Exceptiontyp1 name1){ ..... // catch-Block 1 } // Fehler des Exceptiontyp1 abfangen catch (Exceptiontyp2 name2){ ..... // catch-Block 2 } // Fehler des Exceptiontyp2 abfangen .... // weitere catch-Konstrukte finally { ..... // finally-Block } // ist optional // wird immer durchlaufen Harms: "SoftwareEntwicklung", SWENT, WS 2001/02 - 68 - # 137 Checked und Unchecked Exceptions Unchecked Exceptions müssen vom Programmierer weder abgefangen werden, noch in der throws-Klausel der Schnittstelle der Methode angegeben werden. Auf unchecked Exceptions wird ein Programm vom Compiler nicht überprüft. Unchecked Exceptions sind: RuntimeException und Error. Alle andereren Exceptions sind Checked Exceptions. Checked Exceptions müssen vom Programmierer behandelt werden. Auf Checked Exceptions wird ein Programm vom Compiler überprüft (checked). #138 Checked Exceptions müssen - wenn sie in einer Methode geworfen werden, entweder dort in einem Exception Handler behandelt werden oder aber in der throws-Klausel der Methode, welche die Exception wirft, angegeben werden, um anzuzeigen, dass sie die entsprechende Exception nach außen weitergibt. // Datei: Test.java public class Test { public main static void main(String[] args){ int[] intarr = new int[4]; for (int i=0; i<8; i++) { try { intarr[i]=i; System.out.println(intarr[i]); } catch(ArrayIndexOutOfBoundsException e){ System.out.println("Index zu gross!"); } }}} Harms: "SoftwareEntwicklung", SWENT, WS 2001/02 - 69 - # 139 Ausnahmen ankündigen - die throws-Klausel // Datei: DatumEingabe.java import java.util.Dat; import java.text.*; public class DatumEingabe { public Date pruefeDatum (String datum) throws ParseException { ..... } public static void main (String[] args){ .... try { .... } catch (ParseException e) { System.out.println("Fehler!");} } #140 Beispiele für Exceptions von der Klasse Error abgeleitet: OutOfMemoryError, StackOverflowError von der Klasse Exception abgeleitet: ClassNotFoundException von der Klasse RuntimeException abgeleitet: ArithmeticException // Integer durch 0 geteilt ArrayIndexOutOfBoundsException ClassCastException // Cast nicht möglich NullPointerException // versuchter Zugriff auf Klassen// element über null-Referenz Harms: "SoftwareEntwicklung", SWENT, WS 2001/02 - 70 -