Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11



Relevanta dokument
Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Undantag. Engelska: exceptions. Skansholm: exceptionella händelser

Objektorienterad programmering

Föreläsnings 9 - Exceptions, I/O

Testning av program. Verklig modell för programutveckling

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

OOP Objekt-orienterad programmering

Föreläsning 12. Föreläsning 12. Rörliga figurer Klassen Timer Undantag Något om applets. Rörliga appletsfigurer Klassen Timer Undantag

Klassen javax.swing.timer

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Objektorienterad Programmering (TDDC77)

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

Lösningar för tenta 2 DAT043,

Klasshierarkier - repetition

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Föreläsning 14. Filhantering

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Kopiering av objekt i Java

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Exceptions (undantag) Murach s: kap 7

Konstruktion av klasser med klasser

F10 - Exceptions. ID1004 Objektorienterad programmering Fredrik Kilander

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Recitation 4. 2-D arrays. Exceptions

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Tentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

Testning och felhantering

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Objektorienterad programmering

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Felhantering TDDD78, TDDE30, 729A

Fördjupad Java. Undantagshantering. Fel

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

DAT043 Objektorienterad Programmering

Klasshierarkier. Klasser kan byggas på redan definierade klasser

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Undantagshantering. Fördjupad Java. Fel. Undantag. Fånga Undantag. Grupper av Undantag

Undantagshantering. Fördjupad Java. Undantag. Fel. Grupper av Undantag. Fånga Undantag

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Felhantering. Andra brott mot språkets regler. Man kan också i programmet bryta mot ett antal olika regler som gäller. Exempelvis:

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Felsökning, UML. Översikt. Java starkt typat. Typomvandling (casting) Exempelhierarki. Stark typning

trafiksimulering Intro OU5 trafiksimulering

Input. Programmering. Andra källor

Objektorienterad Programkonstruktion. Föreläsning jan 2016

Laboration 1 - Grunderna för OOP i Java

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Tentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Javas Exceptions. DD2385 Programutvecklingsteknik Fler bilder till föreläsning 7 23/ Kort om Javas Exceptions Trådar i Java

Tentamen FYTA11 Javaprogrammering

Objektorienterad programmering i Java

Objektorienterad programmering D2

Fortsättningskurs i programmering F 5. GUI händelsehantering - undantagshantering Hugo Quisbert AWT. Paket för hantering av grafik

Java, klasser, objekt (Skansholm: Kapitel 2)

Objektorienterad Programmering DAT043. Föreläsning 4 23/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Föreläsning 6: Metoder och fält (arrays)

Objektorienterad programmering (OOP) Föreläsning 15 & 16. Klasser för olika slags fordon. Klasser och objekt

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

Att skriva till och läsa från terminalfönstret

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

Detta dokument är ett exempel, cirka hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

Överlagring, static, testning, formella metoder och undantag! Förelasning 13!! TDA540 Objektorienterad Programmering!

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

JAVAUTVECKLING LEKTION 4

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass

Objektorienterad Programkonstruktion. Föreläsning 11 6 dec 2016

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

F3: Recursive descent, tokenisering, avbildningar och undantag. Carl Nettelblad

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll.

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Lösningsförslag, tentamen FYTA11 Javaprogrammering

Laboration A Objektsamlingar

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Tentamen i Grundläggande programmering STS, åk 1 lördag

1 Comparator & Comparable

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

Lösningsförslag till tentamen

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

Länkade strukturer, parametriserade typer och undantag

OOP Objekt-orienterad programmering

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

PROGRAMMERINGSTEKNIK TIN212

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

Lösningsförslag till tentamen FYTA11 Javaprogrammering

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Enum, mer om Arv, Abstrakta klasser, Polymorfism, Recursion! Förelasning 14!! TDA540 Objektorienterad Programmering!

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Transkript:

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11 Undantag Engelska: exceptions Skansholm: exceptionella händelser Fel som genereras om man försöker öppna en fil som inte finns, dividera med noll, indexera utanför en array osv. 1 3 Olika typer av fel Kompileringsfel: programkoden följer inte Javas regler Exekveringsfel: fel som uppstår när programmet körs och medför att programmet inte kan fortsätta exekvera. Exempel: en fil som ska öppnas saknas, använding av referensvariabel som inte refererar något objekt. Logiska fel: programmet gör inte det vi väntade oss Exekveringsfel handlar ofta om problem som ligger utanför programmet, tex felaktigt indata Exempel: Skriv ett program som 1. ber om ett filnamn 2. öppnar filen 3. läser innehållet 4. gör nåt med innehållet 5. stänger filen Alla operationer kan gå snett! 2 4

Motivation (forts) En lösning: skriv uttryckliga tester för alla felsituationer h = open_file(...) if (h.error) { // hantera felet else { // fortsätt att läsa filen Om man ska hantera alla felsituationen blir kontrollflödet komplicerat! Dessutom: det är svårt att testa koden. Man måste provköra med alla kombinationer av felsituationer. class A { class B extends A { class Exce2 { A x = new A(); B y = (B)x; $ java Exce2 java.lang.classcastexception: A at Exce2.main(Exce2.java:8) 5 7 Exempel class Exce1 { static void p () { int x = 1/0; p(); $ java Exce1 java.lang.arithmeticexception: / by zero at Exce1.p(Exce1.java:3) at Exce1.main(Exce1.java:7) class Exce3 { int x = Integer.parseInt(arg[0]); System.out.println(x*x); 6 8

$ java Exce3 42 1764 $ java Exce3 kaka java.lang.numberformatexception: kaka at java.lang.integer.parseint(integer.java:414) at java.lang.integer.parseint(integer.java:463) at Exce3.main(Exce3.java:3) $ java Exce3 java.lang.arrayindexoutofboundsexception at Exce3.main(Exce3.java:3) Typer av undantag Ett undantag i Java är ett objekt av någon subklass till klassen java.lang.throwable. Undantagen kan delas upp i tre grupper: Error (Fel) Run-time exception Checked exception (Kontrollerade undantag) 9 11 Typer av undantag (forts) Undantag Frågor om undantag. Vilka typer av undantag finns det? Hur genereras dem? Hur kan man hantera dem? Error Fel som vanligtvis inte kan hanteras, tex att maskinen har slut på minne. Run-time exception Vanliga programfel, tex division med noll, fel i arrayindexering, fel i typkonvertering, eller access av null-objekt. Kontrollerade undantag Fel som rimligtvis bör hanteras av programmet, till exempel försök att öppna en fil som inte finns. 10 12

De viktigaste typerna av undantag Typer av undantag (forts) Vilket typ av undantag? Object Ett undantag tillhör gruppen Error Throwable om det tillhör en klass som ärver från java.lang.error Ett undantag tillhör gruppen Run-time Exception Error Exception om det tillhör en klass som ärver från java.lang.runtimeexception Kontrollerade undantag RunTimeException Tips: RuntimeException har en konstruktor som tar Throwable som argument... Alla andra undantag tillhör gruppen Checked Exception. Exempel: IOException 13 15 Att kasta ett undantag Typer av undantag (forts) Det finns två viktiga klasser som ärver direkt från Throwable, java.lang.error och java.lang.exception java.lang.exception har en viktig subklass java.lang.runtimeexception (Generera exceptionella händelser) class Undantag extends Exception { class A { void m() throws Undantag { throw new Undantag(); 14 16

Kasta undantag (forts) Notera: Vi måste deklarera att metoden m kastar undantag (och vilken typ av undantag). Detta gäller för alla kontrollerade undantag (checked exceptions). Undantag skapas med new (som alla andra objekt). hantera undantag (forts) En sats try {... catch (U e) { hantera felet evaluerar... och fångar alla fel av klassen U 17 19 Hantera undantag Exempel class Exce5 { void m() throws Undantag { throw new Undantag(); static void main(string [] arg) { Exce5 x = new Exce5(); try { x.m(); catch (Undantag e) { System.out.println("Ett undantag..."); Exempel: try-catch 2 class Exce6 { static int div (int x, int y) { int r; try { r = x / y; catch (ArithmeticException e) { r = 0; return r; 18 20

Exempel: try-catch 2 (forts) int x = Integer.parseInt(arg[0]); int y = Integer.parseInt(arg[1]); int z = div(x,y); System.out.println(z); Att passa ett undantag vidare Vad händer om en metod inte fångar ett kontrollerat undantag? För att den saknar en try-sats, eller för att try-satsen inte fångar just den typen av undantag. Undantaget passas vidare till anroparen. Vilket innebär att anroparen också måste deklarera undantaget. 21 23 Exempel: try-catch 2 (körexempel) harpo$ java Exce6 java.lang.arrayindexoutofboundsexception: 0 at Exce6.main(Exce6.java:13) harpo$ java Exce6 100 7 14 harpo$ java Exce6 100 0 0 harpo$ q Mer om try-satser En try-sats kan ha flera catch-klausuler plus en finally-klausul. try {... catch (U e) { hantera U catch (V e) { hantera V finally { avslutning 22 24

Finally När körs finally-delen? En try kan terminera på tre olika sätt. 1. {... terminerar normalt. 2. {... kastar ett undantag som hanteras av en catch-klausul. 3. {... kastar ett undantag som inte hanteras. Sammanfattning Alla fel som uppstår vid körning representeras som undantag Undantag är objekt i någon subklass till Throwable Undantag kan hanteras (med try-catch) eller deklarertas (med throws) Vissa undantag (kontrollerade undantag, eller checked exceptions) måste deklareras; om en metod kan kasta ett sådant måste den deklarera det 25 27 När körs finally-delen? (forts) 1. Normal terminering. Finally-delen körs efter att {... terminerat 2. Undantag kastas och hanteras av en catch. Finally-delen körs efter att hanteraren körts. 3. Undantag kastas men hanteras inte. Finally-delen körs före undantaget passas vidare. Finally-delen körs alltid. Bra för att (tex) stänga filer. (Men close() kan kasta en IOException som måste fångas...) 26