180 likes | 299 Views
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;
E N D
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
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