Exception Handling Kapitel 9
Agenda Exceptions try, throw and catch Skapa en egen exception-klass Multipla throw / catch Slänga vidare en exception Olika sorters exceptions För- och eftervillkor
try, throw and catch Scanner kbd = new Scanner(System.in); try { int a = 5; int b = kbd.nextInt(); if(b == 0) throw new Exception("Kan inte dela med noll!"); else System.out.println("a / b = " + a/b); } catch(Exception e) { System.out.println(e.getMessage()); }
try, throw and catch Try-blocket Innehåller kod där nått kan gå snett Om det går snett så “kastar” (throw) vi en exception Catch-blocket Fångar “kastet” Nästan som en metod
Fördefinierade exception-klasser FileNotFoundException IOException ClassNotFoundException NoSuchMethodException
Skapa en egen exception-klass public class delamednoll extends Exception { public delamednoll(String message) { super(message); }
Skapa en egen exception-klass Scanner kbd = new Scanner(System.in); try { int a = 5; int b = kbd.nextInt(); if(b == 0) throw new delamednoll("Kan inte dela med noll!!!"); else System.out.println("a / b = " + a/b); } catch(delamednoll e) { System.out.println(e.getMessage()); }
Multipla throw/catch try { int b = kbd.nextInt(); if(b == 0) throw new delamednoll("Hej 1"); else if(b < 0) throw new negativtal("Hej 2"); } catch(delamednoll e) { System.out.println(e.getMessage()); } catch(negativtal e) { System.out.println(e.getMessage()); }
Slänga vidare en exception public static void main(String[ ] args) { Scanner kbd = new Scanner(System.in); try { int a = 5, b = kbd.nextInt(); int c = dela(a,b); System.out.println(c); } catch(delamednoll e) { System.out.println(e.getMessage()); }
Slänga vidare en exception public static int dela(int a, int b) throws delamednoll { if(b == 0) throw new delamednoll("Inte bra!"); return a/b; }
Olika sorters exceptions Checked exception Måste tas omhand i ett catch-block (eller throws) Unchecked exception Behöver inte tas omhand i ett catch-block Array index out of bounds Division med noll Avslutar programmet
Olika sorters exceptions
Errors Genereras vid onormala tillstånd Vad nu det betyder Out of memory Behöver inte tas omhand Som unchecked
För- och eftervillkor Förvillkor (pre) Vad som ska gälla innan metoden anropas Om det inte är uppfyllt är resultatet odefinierat Eftervillkor (post) Vad som ska gälla när metoden är klar Under förutsättning att förvillkoret var uppfyllt
Metod för division //pre: nämnare != 0 //post: kvoten mellan taljare och //namnare har returnerats double dividera(double taljare, double namnare) { return taljare/namnare; }
Kontraktsprogrammering taUtPengar pre: ut <= saldo post: saldo har minskats med ”ut” kronor sattInPengar pre: in >= 0 saldo har ökats med ”in” kronor
Summering Exceptions Är ett objekt Separerar normalfallet från ovanliga fall try, throw and catch Skapa en egen exception-klass Multipla throw / catch Slänga vidare en exception throws
Summering Olika sorters exceptions Checked Unchecked Error Kontraktsprogrammering pre / post