Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Exception Handling in Java Seminar aus Softwareentwicklung Norbert Wiener.

Ähnliche Präsentationen


Präsentation zum Thema: "Exception Handling in Java Seminar aus Softwareentwicklung Norbert Wiener."—  Präsentation transkript:

1 Exception Handling in Java Seminar aus Softwareentwicklung Norbert Wiener

2 Ziele von Exception Handling Programme robuster machen gegen: fehlerhafte Eingaben Gerätefehler (Defekte, Platte voll,...) Programmierfehler (z.B. Division durch 0) Trennung zwischen Algorithmus und Fehlerbehandlung Fehlerbehandlung durch Compiler überprüfbar machen

3 Auslösen von Exception explizite Ausnahmen: throw Anweisung im Code. implizite Ausnahmen durch die JVM - Divison durch 0 => ArithmeticException - Zugriff über null-Ref. => NullPointerException - Ungültige Konvertierung => ClassCastException setPassword(String pw) { if(pw.length() < 5) throw new Exception(mind. 5 Zeichen); } int intDiv (int i, int j) { return i/j; }

4 try-catch-finally Syntax try { Anweisungen; } catch (Ausnahme1 a1) { Fehlerbehandlung1; } catch (Ausnahme2 a2) { Fehlerbehandlung2; } finally { Aufräumen; } Der finally-Block ist optional Nach einem try-Block muss mindestens ein catch-Block folgen! Bei mehreren catch-Blöcken beginnt die Suche der Ausnahmenbehandlung von oben nach unten.

5 Beispiel class Catch{ public static void main(String[] args){ try{ int i = Integer.parseInt(args[0]); System.out.print("i= "+i); }catch(ArrayIndexOutOfBoundsException e){ System.out.print("Parameter vergessen!"); }catch(NumberFormatException e){ System.out.print(" kein int-Wert!"); }finally{ System.out.println(" finally!"); } Catch 123 i= 123 finally! Catch xy kein int-Wert! finally! Catch Parameter vergessen! finally! Finally wird immer ausgeführt!

6 Ausnahme-Klasse definieren class MyException extends Exception{ public MyException() { super(); } public MyException(String msg) { super(msg); } Konstuktor ohne Parameter Konstruktor mit Fehlermeldung Eigener Exceptiontyp (indirekt) von Throwable ableiten. class MyException extends Exception{ }

7 Die throws-Klausel Weitergabe der Exception an die aufrufende Methode setPassword(String pw) { try{ if(pw.length() < 5){ throw new Exception(Fehler); } }catch(Exception e){ Ausnahme behandeln! } } static setPassword(String pw) throws Exception { if(pw.length() < 5){ throw new Exception(Fehler); } } Try{ setPassword(pw); }catch(Exception e){ Ausnahme behandeln! }

8 throws Beispiel..Main(...){ try{ A(x); }catch(Exc1 e){..print("Main"); } A(int x) throws Exc1{ try{ B(x); }catch(Exc2 e){...println("A"); }finally{..println("finA") } B(int x) throws Exc1, Exc2{ try{ C(x); }catch(Exc3 e){...println("B"); }finally{...println("finB"); } C(int x) throws Exc1, Exc2,Exc3 { try{ if(x==1){ throw new Exc1("F."); }else if(x==2){ throw new Exc2(); }else if(x==3){ throw new Exc3(); }else{ throw new Exc4(); } }catch(Exc4 e){....println("C"); } x=1 finB finA Main x=2 finB A finA x=3 B finB finA x=4 C finB finA

9 Debugging von Ausnahmen finB finA Main Fehler! Exc1: Fehler! at C. (C.java:6) at B. (B.java:4) at A. (A.java:4) at Test.main(Test.java:6) class Test{ static int x =1; public static void main(String args[]) { try{ A a= new A(x); }catch(Exc1 e){ System.out.println("Main"); System.out.println(e.getMessage()); e.printStackTrace(); } e.getMessage() e.printStackTrace()

10 Klassenhierarchie Throwable ErrorException VirtualMachineErrorLinkageError OutOfMemoryErro r RuntimeException NullpointerException IOException FileNotFoundException NoSuchFieldError uncheckedchecked

11 Die Error-Klasse VirtualMachineError InternalError OutOfMemoryError StackOverflowError UnknownError LinkageError NoSuchMethodError NoSuchFieldError AbstraktMethodError ThreadDeath Ausnahmen des Typs Error sind nicht vernünftig zu behandeln.

12 Die Exception Klasse IOException FileNotFoundException SocketException EOFException RemouteException UnknownHostException InterruptedException NoSuchFieldException ClassNotFoundException NoSuchMethodException Diese Exception müssen behandelt werden! (ausgenommen RuntimeException)

13 Exception auf ByteCode Ebene void f() { try { throw new Exception(); } catch (Exception e) { System.out.println(e); } Exception e; e = new Exception(); throw e; 0 new #2 3 dup 4 invokespecial 7 athrow 8 astore_1 9 getstatic out:System 12 aload_1 13 invokevirtual println 16 return Objekt im Speicher allokieren Objektreferenz auf OperantenStack Referenzadresse wird dupliziert Konstruktor wird ausgeführt Exception Table: From To Target Type Exception Adr.-> Exception Operanden-Stack

14 Beispiel static int remainder(int dividend, int divisor) throws OverflowException, DivideByZeroException { if ((dividend == Integer.MIN_VALUE) && (divisor == -1)) { throw new OverflowException(); } try { return dividend % divisor; } catch (ArithmeticException e) { throw new DivideByZeroException(); } Exception Handling wird an die Vorgängermethode delegiert!

15 Beispiel 0 iload_0 1 ldc #1 3 if_icmpne 19 6 iload_1 7 iconst_m1 8 if_icmpne new #4 14 dup 15 invokespecial #10 18 athrow 19 iload_0 20 iload_1 21 irem 22 ireturn 23 pop 24 new #2 27 dup 28 invokespecial #9 31 athrow Exception Table: From To Target Type ArithmeticException static int remainder(int dividend, int divisor) throws OverflowException, DivideByZeroException { if ((dividend == Integer.MIN_VALUE) && (divisor == -1)) { throw new OverflowException(); } try { return dividend % divisor; } catch (ArithmeticException e) { throw new DivideByZeroException(); }

16 Danke für die Aufmerksamkeit


Herunterladen ppt "Exception Handling in Java Seminar aus Softwareentwicklung Norbert Wiener."

Ähnliche Präsentationen


Google-Anzeigen