Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

11 - Exceptions. 2 NOEA2009Java-kursus – Exceptions Hvad er en exception? En undtagelse. Typisk en fejl der opstår runtime Afbryder det normale programflow.

Lignende præsentationer


Præsentationer af emnet: "11 - Exceptions. 2 NOEA2009Java-kursus – Exceptions Hvad er en exception? En undtagelse. Typisk en fejl der opstår runtime Afbryder det normale programflow."— Præsentationens transcript:

1 11 - Exceptions

2 2 NOEA2009Java-kursus – Exceptions Hvad er en exception? En undtagelse. Typisk en fejl der opstår runtime Afbryder det normale programflow Eksempler  Divider med 0  Tilgår elementer i et array udenfor området  Konvertionsfejl  Åbne en ikke eksisterende fil

3 3 NOEA2009Java-kursus – Exceptions Exception Eksempel class DivByZero { public static void main(String args[]) { System.out.println(3/0); System.out.println(“Pls. print me.”); } Giver følgende fejl Exception in thread "main" java.lang.ArithmeticException: / by zero at DivByZero.main(DivByZero.java:3) Default gør java følgende:  Skriver beskrivelse ud  Skriver stack trace ud, dvs hvilke metoder er kaldt  Stopper programmet

4 4 NOEA2009Java-kursus – Exceptions Hvad sker der når en exception kastes? Runtime kigger efter en metode med en exception handler

5 5 NOEA2009Java-kursus – Exceptions What Happens When an Exception Occurs? (Continued) When an appropriate handler is found, the runtime system passes the exception to the handler  An exception handler is considered appropriate if the type of the exception object thrown matches the type that can be handled by the handler  The exception handler chosen is said to catch the exception. If the runtime system exhaustively searches all the methods on the call stack without finding an appropriate exception handler, the runtime system (and, consequently, the program) terminates and uses the default exception handler

6 6 NOEA2009Java-kursus – Exceptions Searching the Call Stack for an Exception Handler Hvis en handler kan findes, bruges den til at håndtere exception’en, eller stoppes programmet

7 7 NOEA2009Java-kursus – Exceptions Fordele ved Java Exception Handling Framework Adskiller fejlhåndtering fra almindelig program logik Fejl smides gennem metodestakken til der er en er istand til at håndtere den Kan gruppere og differencere fejltyper

8 8 NOEA2009Java-kursus – Exceptions Adskille fejlhåndtering fra almindelig kode I traditionel kode kan fejl håndtering føre til dårligere kode, f.eks dyb nesting. Eksempel: Pseudokode for åbne en fil readFile { open the file; determine its size; allocate that much memory; read the file into memory; close the file; }

9 9 NOEA2009Java-kursus – Exceptions Tilføj fejlhåndtering errorCodeType readFile { initialize errorCode = 0; open the file; if (theFileIsOpen) { determine the length of the file; if (gotTheFileLength) { allocate that much memory; if (gotEnoughMemory) { read the file into memory; if (readFailed) { errorCode = -1; } } else { errorCode = -2; }

10 10 NOEA2009Java-kursus – Exceptions } else { errorCode = -3; } close the file; if (theFileDidntClose && errorCode == 0) { errorCode = -4; } else { errorCode = errorCode and -4; } } else { errorCode = -5; } return errorCode; }

11 11 NOEA2009Java-kursus – Exceptions Eksempel med exception readFile { try { open the file; determine its size; allocate that much memory; read the file into memory; close the file; } catch (fileOpenFailed) { doSomething; } catch (sizeDeterminationFailed) { doSomething; } catch (memoryAllocationFailed) { doSomething; } catch (readFailed) { doSomething; } catch (fileCloseFailed) { doSomething; } Her er almindelig kode og fejlhåndtering adskildt

12 12 NOEA2009Java-kursus – Exceptions Bemærk at exception ikke sparer en for at overveje hvilke fejl der kan opstå eller at håndtere fejlene. Men de giver mulighed for at håndtere fejlene det rigtige sted I praksis er det svært at designe exception handling

13 13 NOEA2009Java-kursus – Exceptions Håndter fejl det rigtige sted Antag at readFile metoden er det 4. kald i en serie af indlejrede kald: method1 kalder method2, som kalder method3, som kalder readFile Og antag at method1 er den eneste der er interesseret i fejl i readFile I tradiotionel programmering kunne det se ud på næste slide

14 14 NOEA2009Java-kursus – Exceptions Traditionel måde method1 { errorCodeType error; error = call method2; if (error) doErrorProcessing; else proceed; } errorCodeType method2 { errorCodeType error; error = call method3; if (error) return error; else proceed; } errorCodeType method3 { errorCodeType error; error = call readFile; if (error) return error; else proceed; } Her returneres fejlkode i hvert kald. Det gør at man ikke kan bruge returværdi til alminde programkode

15 15 NOEA2009Java-kursus – Exceptions Using Java Exception Handling method1 { try { call method2; } catch (exception e) { doErrorProcessing; } method2 throws exception { call method3; } method3 throws exception { call readFile; } Method2 og method3 kaster bare exceptions videre, mens method1 håndterer dem

16 16 NOEA2009Java-kursus – Exceptions try-catch statements Syntax: try { } catch ( ) { }... } catch ( ) { }

17 17 NOEA2009Java-kursus – Exceptions Catching Exceptions: The try-catch Statements class DivByZero { public static void main(String args[]) { try { System.out.println(3/0); System.out.println(“Please print me.”); } catch (ArithmeticException exc) { //Division by zero is an ArithmeticException System.out.println(exc); } System.out.println(“After exception.”); }

18 18 NOEA2009Java-kursus – Exceptions Catching exceptions: Flere catch class MultipleCatch { public static void main(String args[]) { try { int den = Integer.parseInt(args[0]); System.out.println(3/den); } catch (ArithmeticException exc) { System.out.println(“Divisor was 0.”); } catch (ArrayIndexOutOfBoundsException exc2) { System.out.println(“Missing argument.”); } System.out.println(“After exception.”); }

19 19 NOEA2009Java-kursus – Exceptions Nested try's class NestedTryDemo { public static void main(String args[]){ try { int a = Integer.parseInt(args[0]); try { int b = Integer.parseInt(args[1]); System.out.println(a/b); } catch (ArithmeticException e) { System.out.println(“Div by zero error!"); } } catch (ArrayIndexOutOfBoundsException) { System.out.println(“Need 2 parameters!"); }

20 20 NOEA2009Java-kursus – Exceptions Brug metoder class NestedTryDemo2 { static void nestedTry(String args[]) { try { int a = Integer.parseInt(args[0]); int b = Integer.parseInt(args[1]); System.out.println(a/b); } catch (ArithmeticException e) { System.out.println("Div by zero error!"); } public static void main(String args[]){ try { nestedTry(args); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Need 2 parameters!"); }

21 21 NOEA2009Java-kursus – Exceptions finally Keyword Syntax: try { } catch ( ) { }... } finally { } Indeholder der altid bliver kørt. Bruges f.eks til at lukke database forbindelser

22 22 NOEA2009Java-kursus – Exceptions finally Keyword Køres altid uanset situation:  Tvungen exit, f.eks break eller return  Normal afslutning  Grebet exception - Exception blev kastet og grebet i metoden  Exception blev ikke grebet i metoden men kastet videre

23 23 NOEA2009Java-kursus – Exceptions finally Keyword, eksempel class FinallyDemo { static void myMethod(int n) throws Exception{ try { switch(n) { case 1: System.out.println("1st case"); return; case 3: System.out.println("3rd case"); throw new RuntimeException("3!"); case 4: System.out.println("4th case"); throw new Exception("4!"); case 2: System.out.println("2nd case"); } //fortsættes

24 24 NOEA2009Java-kursus – Exceptions Eksempel fortsat } catch (RuntimeException e) { System.out.print("RuntimeException: "); System.out.println(e.getMessage()); } finally { System.out.println("try-block entered."); } //fortsættes...

25 25 NOEA2009Java-kursus – Exceptions Eksempel fortsat public static void main(String args[]){ for (int i=1; i<=4; i++) { try { FinallyDemo.myMethod(i); } catch (Exception e){ System.out.print("Exception caught: "); System.out.println(e.getMessage()); } System.out.println(); }

26 26 NOEA2009Java-kursus – Exceptions Kaste exceptions: throw Keyword Du kan kaste dine egne exceptions throw ; Den exception du kaster er et objekt: throw new ArithmeticException(“testing...”);

27 27 NOEA2009Java-kursus – Exceptions Regler for exceptions En metode skal enten gribe alle exceptions eller liste alle den kaster (videre). Dette gælder ikke Error og RuntimeException, og deres subklasser Syntax: ( ) throws { }

28 28 NOEA2009Java-kursus – Exceptions Eksempel: class ThrowingClass { static void meth() throws ClassNotFoundException { throw new ClassNotFoundException ("demo"); } class ThrowsDemo { public static void main(String args[]) { try { ThrowingClass.meth(); } catch (ClassNotFoundException e) { System.out.println(e); }

29 29 NOEA2009Java-kursus – Exceptions Error og Exception klasser Throwable class  Rod klasse for alle exception klasser  Subklasser: Error Exception Exception class  Forhold som programmer normalt vil kunne håndtere  Forekommer normalt på grund af noget i koden  Eksempler: Division by zero error Array out-of-bounds error

30 30 NOEA2009Java-kursus – Exceptions Error og Exception klasser Error class  Bruges af JRE til at håndtere udefrakommende fejl  Kan generelt ikke håndteres af programmet  Eksempler: Out of memory errors Hard disk crash

31 31 NOEA2009Java-kursus – Exceptions Exception klasser og hieraki

32 32 NOEA2009Java-kursus – Exceptions Exception klasser og hieraki Multiple catches bør rangordnes fra subklasse til superklasse. class MultipleCatchError { public static void main(String args[]){ try { int a = Integer.parseInt(args [0]); int b = Integer.parseInt(args [1]); System.out.println(a/b); } catch (ArrayIndexOutOfBoundsException e) { } catch (Exception ex) { }

33 33 NOEA2009Java-kursus – Exceptions Checked og unchecked Exceptions Checked exception  Java compiler checker om programmet enten griber eller lister exceptions med throwable  Hvis ikke, vil der komme fejl. Unchecked exceptions  Compileren checker ikke  Built-in unchecked exception klasser Error RuntimeException Their subclasses  Håndtering af disse kan gøre programmet rodet

34 34 NOEA2009Java-kursus – Exceptions Lave sin egen exception klasse Oprette en klasse der arver fra RuntimeException eller Exception Ændr klassen ved evt. at tilføje members og konstruktører Eksempel: class HateStringExp extends RuntimeException { /* some code */ }

35 35 NOEA2009Java-kursus – Exceptions Brug af egne exceptions class TestHateString { public static void main(String args[]) { String input = "invalid input"; try { if (input.equals("invalid input")) { throw new HateStringExp(); } System.out.println("Accept string."); } catch (HateStringExp e) { System.out.println("Hate string!”); }


Download ppt "11 - Exceptions. 2 NOEA2009Java-kursus – Exceptions Hvad er en exception? En undtagelse. Typisk en fejl der opstår runtime Afbryder det normale programflow."

Lignende præsentationer


Annoncer fra Google