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

Slides:



Advertisements
Lignende præsentationer
1 • Best practice for exception handling • Exception klasser • Division med nul uden exception handling • Division med nul med exception handling •. NET.
Advertisements

07 – Kort om OO Introduktion.
T1 – OPGAVE 14.2 LINETT & SABRINA Klasse Varer namespace Opgave_14._2 { class Varer { private string vare; private string farve; private double.
Indledende Programmering Uge 2 - Efterår 2006 Selektioner og interaktion mellem objekter Susanne Brix Lindros.
Symbolsk maskinsprog.
C#: Udtryk og metoder. Indhold “With regards to programming statements and methods, C# offers what you would come to expect from a modern OOPL…” Udtryk.
Distribueret programmering, specielt.NET Remoting Rasmus D. Lehrmann DM
Første generation (maskiner/operativsystemer) 45-55: radiorør Kun maskinsprog programmering = skrivning af nullerog ettaller Intet operativsystem programmør.
Grundlæggende programmering Efterår 2001
Exceptions. 2 Nordjyllands Erhvervakademi – 2009 Objectives “Unfortunately, errors are a part of life. Some are detected by the compiler, some are detected.
09 – Arv og polymorfi i java
Hvordan man skriver koden.
01 – Java platform for starters. 2 NOEA2009Java-kursus – Java Platform Introduktion til Java Baggrund Hvad er Java? Faciliteter i Java.
VOOP, 8 april Refleksion i objekt orienterede programmeringssprog Mandag 8/ Kasper Østerbye.
ASP.NET Cache, State DataGrid og Diagnostics. Agenda – ASP.NET Cache, State og Cookies ( 1 del ) –Cache –Static member –Application State –Session State.
Indledende Programmering Uge 5 - Efterår 2006 Om at udvikle korrekte og pålidelige programmer Susanne Lindros.
© 2013 Netcompany A/S Netcompany A/S · Grønningen 19 · 1270 København K · Tlf Side 1 Simon Otto Nielsen Diplomingeniør i informations og kommunikationsteknologi.
GP5, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 5 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
GP 10, 7/ Grundlæggende programmering Efterår 2001 Forelæsning 10 onsdag 7/ kl. 9:15 – 12:00.
FEN IntroJava AAU1 Opsamling: afvikling af Java-programmer Input fra keyboard og fil Fra en prompt Fra BlueJ Fra NetBeans.
FEN IntroJava AAU1 Java grundelementer Variable og datatyper Sætninger og udtryk Metoder.
18 – Java Server Faces. 2 NOEA2009Java-kursus – JSF 2 Web-applikationer - 1 Brugere interagerer med en Web-browser Browseren sender forespørgsler til.
Globaliseringsredegørelsen 24.mar. 14 Figurer fra Danmark tiltrækker for få udenlandske investeringer i Sådan ligger landet
Begreber og Redskaber 2. Plan for idag Noget om bestanddelene i et programmeringssprog Syntaksbeskrivelse af java Næste gang: –Binære tal –Repræsentation.
Forelæsning 3.1 Collections Javas for-each løkke
1 Tråde 2 Plan Trådbegrebet Synkronisering Koordinering Eksempel: et flertrådet spil.
Delphi og C++ Builder C++ Builder. C++ Historie Sproget blev designet for AT&T af danskeren Bjarne Stoustrup En objektorienteret videreudvikling.
Items 4, 14, 24, 34, 44, 54 Orange gruppe Liv, Jonas, Thorkil, Søren S og Martin D.
Fundamentale datastrukturer
Mønstre En lille introduktion. Singleton Tilgå et objekt igennem klassereference i stedet for objektreference.  Overflødiggør referencer til objektet.
10. Datastrukturer. 2 Nordjyllands Erhvervakademi Collections library Datastrukturer i.NET kaldes normalt Collections Findes i namespace System.Collections.
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
GP 3, 12/ Grundlæggende programmering Efterår 2001 Forelæsning 3 onsdag 12/ kl. 9:15 – 12:00.
Procestræ under afvikling af cp init login shell cp cp src dest.
Paradigmer i Programmering 2. Sammensatte typer Tupler og lister Programmering med rekursion Programmering med pipe-lines Programmering med polymorfe.
Comparable Students German Students Composite Pattern State Pattern Observer Pattern Collections Interfaces Abstrakte klasser Design Patterns.
Begreber og Redskaber 7. Plan for idag Rekursive underprogrammer Rekursive datastrukturer Rekursion vs iteration Rekursivt: Flette sortering.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
KF04 GRAY Item 2, 12, 22, 32, 42, 52. Consider a builder when faced with many constructor parameters Item 2.
JavaCC Top-down (Recursive descent). Mest populære mht Java. Regulær grammatik og Context-free grammatik i en fil. Tillader EBNF: (..)*, (..)+ og (..)?
C#: Udtryk og metoder Kilde: Joe Hummel. 2 Nordjyllands Erhvervakademi – 2008 Indhold “With regards to programming statements and methods, C# offers what.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
Længste plateau En klassisk problemstilling (Gries, 1981) - og her i Java!!! Denne opgave drejer sig om at bestemme længden af det længste plateau i en.
9. Interfaces. 2 Nordjyllands Erhvervakademi Objectives “Good class design starts with good application design — how many classes, do they relate.
Blå gruppe: Søren, Alexander, Torben, Lasse. De 4 vigtige items: - Singelton - Override clone judiciously - Use interfaces only to define type - Prefer.
GP9, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 11 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
Forelæsning 7.1 – repetition
Tekst filer Tekstfiler opbygges normalt af linier, hvor disse ikke behøver at være samme længde. Når man skal arbejde med tekstfiler, ønsker man metoder.
Identitet vs lighed. Spørgsmål Hvad udskriver run metoden? 1.”Ens!” 2.”Forskellige!” 3.Ved ikke public class Driver{ public static void run(){ String.
Paradigmer i Programmering 3. Højere ordens funktioner Idag: Højere ordens funktioner Algebraiske datatyper Næste gang: I/O, Filer, interaktive programmer.
Effective Java Blå gruppe. Item 18: Interfaces frem for abstrakte klasser Kan implementeres i klasser der ikke nedarver Eksisterende klasser kan nemt.
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
I o p o DAIMI, AU, November 1999Programkonstruktion I9E.1 Konstruktion og brug af klasser – en stak og en HP-regnemaskine push pop.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Programmering med interfaces Separering af specifikation, anvendelse og implementation.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
DAIMIIntroducerende objektorienteret programmering4A.1 Kontrakter og Design Kontraktbaseret design, JavaDoc dokumentation,
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
 Jens Bennedsen, 2003, revideret af EE Introducerende objektorienteret programmering MVC Et mønster for grænseflader.
I o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
RMS - Record Management System Record Store En Record er et bytearray af vilkårlig størrelse En RecordStore er et antal Records nummerede.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
I det efterfølgende kommer nogle eksempler på C kode som adskiller sig fra det vi normalt anvender i C# Hvis du har behov for hurtigt at afprøve små stumper.
Software Testing Software testing.
Quiz – Uge 3 – torsdag – første time
Præsentationens transcript:

11 - Exceptions

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 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 NOEA2009Java-kursus – Exceptions Hvad sker der når en exception kastes? Runtime kigger efter en metode med en exception handler

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 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 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 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 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 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 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 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 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 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 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 NOEA2009Java-kursus – Exceptions try-catch statements Syntax: try { } catch ( ) { }... } catch ( ) { }

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 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 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 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 NOEA2009Java-kursus – Exceptions finally Keyword Syntax: try { } catch ( ) { }... } finally { } Indeholder der altid bliver kørt. Bruges f.eks til at lukke database forbindelser

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 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 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 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 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 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 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 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 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 NOEA2009Java-kursus – Exceptions Exception klasser og hieraki

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 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 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 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!”); }