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

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

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

Klasser för grafik och bildhantering

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

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

Fördjupad Java. Undantagshantering. Fel

OOP Objekt-orienterad programmering

Inre klasser Anonyma klasser Kloning I/O-ramverket. anonyma klasser

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

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

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

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)

(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

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

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

Lösningar för tenta 2 DAT043,

Objektorienterad programmering

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

Språkkonventioner och redigering av tal.

Testning av program. Verklig modell för programutveckling

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

Klassen javax.swing.timer

F2 Java I/O - strömmar Meddelandesändning med TCP

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

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

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

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

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

Klasshierarkier - repetition

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

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

JAVAUTVECKLING LEKTION 7

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

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

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

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

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Instuderingsuppgifter läsvecka 6 - LÖSNINGAR

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

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

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

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

Konstruktion av klasser med klasser

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

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

Objektorienterad Programmering (TDDC77)

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Föreläsning 6. Designmönstret Decorator I/O-ramverket

F4. programmeringsteknik och Matlab

F2 Java I/O - strömmar Meddelandesändning med TCP EDA095 Nätverksprogrammering

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

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

Tentamen FYTA11 Javaprogrammering

Kopiering av objekt i Java

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

Nätverksprogrammering. Tekniker för att skriva program som kommunicerar med varandra över ett nätverk. F1 Nätverk och strömmar.

Hämta data mha URLer Föreläsning 2b. Innehåll Klassen URL

TENTAMEN OOP

Objektorienterad Programmering (TDDC77)

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

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

Tentamen ID1004 Objektorienterad programmering May 29, 2012

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

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.

Lösningsförslag, tentamen FYTA11 Javaprogrammering

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 14. Filhantering

Surfning. Webbklienter och webbservrar. Specialskrivna webbservrar. Kommunikation med sockets

Objektorienterad Programmering (TDDC77)

Översikt. Skriva och läsa data. Kontrollflöde. Två sorters loopar. For-loop. For-loop

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

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

F10 - Exceptions. ID1004 Objektorienterad programmering Fredrik Kilander

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Klasshierarkier. Klasser kan byggas på redan definierade klasser

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

TENTAMEN OOP

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

F1 Nätverk och strömmar

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

Outline. Objektorienterad Programmering (TDDC77) Åsidosättning. Signatur. Åsidosättning. Abstrakta klasser. Ahmed Rezine.

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Objektorienterad programmering D2

Lösningsförslag till tentamen

Lösningsförslag till exempeltenta 2

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

Input. Programmering. Andra källor

OOP Objekt-orienterad programmering

Föreläsning 1 Nätverk och strömmar

Föreläsning 11 Aktiva objekt och trådar, strömmar, kommunikation DAT043,

Felhantering TDDD78, TDDE30, 729A

Laboration 1 - Grunderna för OOP i Java

Transkript:

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. bjectorienterad programmering Sida 1

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! bjectorienterad programmering Sida 2

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. bjectorienterad programmering Sida 3

Exempel class A {} class B extends A {} class Exce2 { static void main (String [] arg) { A x = new A(); B y = (B)x; } } bjectorienterad programmering Sida 4

Exempel, testkörning $ java Exce2 Exception in thread "main" java.lang.classcastexception: A at Exce2.main(Exce2.java:8) bjectorienterad programmering Sida 5

public class ExceNull { private void method() {} public static void main(string[] arg) { ExceNull n = null; n.method(); } } harpo$ javac ExceNull.java harpo$ java ExceNull Exception in thread "main" java.lang.nullpointerexception at ExceNull.main(ExceNull.java:7) bjectorienterad programmering Sida 6

class A { public int m(int x) { return 100/x; } } public class Exce { public static void main (String[] arg) { int x = Integer.parseInt(arg[0]); A a = new A(); int z = a.m(x); System.out.println("100/"+x+" = "+ z); }} bjectorienterad programmering Sida 7

Undantag Frågor om undantag. Vilka typer av undantag finns det? Hur genereras dem? Hur kan man hantera dem? bjectorienterad programmering Sida 8

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) bjectorienterad programmering Sida 9

Typer av undantag (forts) 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. bjectorienterad programmering Sida 10

De viktigaste typerna av undantag Object Throwable Error Exception......... RunTimeException Kontrollerade undantag...... bjectorienterad programmering Sida 11

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 bjectorienterad programmering Sida 12

Vilket typ av undantag? Typer av undantag (forts) Ett undantag tillhör gruppen Error om det tillhör en klass som ärver från java.lang.error Ett undantag tillhör gruppen Run-time Exception om det tillhör en klass som ärver från java.lang.runtimeexception Tips: RuntimeException har en konstruktor som tar Throwable som argument... Alla andra undantag tillhör gruppen Checked Exception. Exempel: IOException bjectorienterad programmering Sida 13

Att kasta ett undantag (Generera exceptionella händelser) class Undantag extends Exception {} class A { void m() throws Undantag { throw new Undantag(); } } bjectorienterad programmering Sida 14

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). bjectorienterad programmering Sida 15

Hantera undantag try {... } catch (U1 e) { hantera felet } catch (U1 e) { hantera felet } finally { avsluta } evaluerar... och fångar alla fel av klassen U1 och U2 och avslutar med att avsluta bjectorienterad programmering Sida 16

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; } bjectorienterad programmering Sida 17

Exempel: try-catch 2 (forts) } static void main (String [] arg) { int x = Integer.parseInt(arg[0]); int y = Integer.parseInt(arg[1]); int z = div(x,y); System.out.println(z); } bjectorienterad programmering Sida 18

Exempel: try-catch 2 (körexempel) harpo$ java Exce6 Exception in thread "main" java.lang.arrayindexoutofboundsexception: 0 at Exce6.main(Exce6.java:13) harpo$ java Exce6 100 7 14 harpo$ java Exce6 100 0 0 harpo$ bjectorienterad programmering Sida 19

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. bjectorienterad programmering Sida 20

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. bjectorienterad programmering Sida 21

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...) bjectorienterad programmering Sida 22

Undantag, 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 bjectorienterad programmering Sida 23

Strömmar och IO Strömmar InputStream OutputStream Läser och skriver strömmar av bytes. Reader Writer Läser och skriver strömmar av char (Unicode). bjectorienterad programmering Sida 24

Klassen InputStream Källa Fil Bytearray InputStream FileInputStream ByteArrayInputStream BufferedInputStream PushbackInputStream PipedOutputStream PipedInputStream bjectorienterad programmering Sida 25

Klassen InputStream, några metoder int read() int read(byte[] buffer) long skip(long n) void close () läser en byte (-1 om strömmen slut) läser bytes in i en buffer skippar (högst) n byte, returnera hur mång stäng strömmen bjectorienterad programmering Sida 26

InputStream, subklasser InputStream ByteArrayInputStream FileInputStream(File f) FileInputStream(String s) PipedInputStream(OutputStream p) BufferedInputStream(InputStream is) DataInputStream(InputStream is) PushBackInputStream(InputStream is) ObjectInputStream(InputStream in) abstrakt klass läser från en array av byte läser från en fil läser från en fil läser från en annan ström Buffrad ström. Läser primitiva datatyper Läser godtyckliga objekt! bjectorienterad programmering Sida 27

Klassen OutputStream void flush() void close() void write(int b) void write(byte [] b) tömmer alla buffrar och ser till att utskriften når sitt mål stänger strömmen skriver en byte skriver en array av bytes bjectorienterad programmering Sida 28

Subklasser till OutputStream DataOutputStream(OutputStream is) Skriver primitiva datatyper, tex writeboolean(boolean b), writechar(char c), writeint(int i) new PipedInputStream() new PipedOutputStream(PipedInputStream p) kopplar ihop två strömmar bjectorienterad programmering Sida 29

Andra strömmar (forts) ObjectInputStream(InputStream in) Läser godtyckliga objekt! ObjectOutputStream(OutputStream in) Skriver godtyckliga objekt! bjectorienterad programmering Sida 30

Reader och Writer Strömmar av char Läser unicode-strömmar (oberoende av operativsystemets teckenrepresentation) bjectorienterad programmering Sida 31

Exempel på metoder Klassen Reader int read() int read(char[] buffer) long skip(long n) void close () läser ett tecken läser in tecken i en buffer skippar (högst) n tecken. stäng strömmen bjectorienterad programmering Sida 32

void close() void flush() void write(char[] cbuf) void write(int c) void write(string str) Klassen Writer bjectorienterad programmering Sida 33

Reader&Writer, subklasser BufferedReader(Reader in) BufferedWriter(Writer out) LineNumberReader(Reader in) PushbackReader(Reader in) PrintWriter(OutputStream out) bjectorienterad programmering Sida 34

Exempel Inläsning från terminalfönster Utskrift till fil Läs in fil... 1. med InputStream 2. med Reader 3. med try-catch 4. med BufferedReader bjectorienterad programmering Sida 35

Filter (Reader&Writer) BufferedReader(Reader in) BufferedWriter(Writer out) LineNumberReader(Reader in) PushbackReader(Reader in) bjectorienterad programmering Sida 36

Exempel: FilterReader Definiera egna filter (Finns motsvarande för de antra tre typerna av strömmar) En abstrakt klass, ärver Reader En konstruktor, som tar Reader som argument bjectorienterad programmering Sida 37

Egna filter (forts) En protected instansvariabel in (den ström som filtreras) samma metoder som Reader För att konvertera från stora till små bokstäver räcker det om man definierar ett filter som överskuggar (overrides) metoderna för läsning. ToLowerCaseReader.java, UpperToLower.java bjectorienterad programmering Sida 38

Serialisering Klasserna ObjectInputStream och ObjectOutputStream kan användas för att läsa och skriva (nästan) vilka objekt som helst. Operationer: void writeobject(object o) skriver ett objekt Object readobject() läser ett objekt bjectorienterad programmering Sida 39

Serialisering (forts) Krav: readobject och writeobject kräver att objektet tillhör en klass som implementerar interfacet Serializable Om in och out är av klasserna InputStream och OutputStream, skriv ObjectInputStream sin = new ObjectInputStream(in); ObjectOutputStream sout = new ObjectOutputStream(out); för att skapa strömmar som kan läsa och skriva objekt. Exempel: SeriTest1.java, SeriTest2.java bjectorienterad programmering Sida 40

Plattformsoberoende Lite om Unicode Mål: kunna koda alla världens språk (inklusive utdöda) en char är 16 bitar (= 65536 tecken). Nån som tror att det räcker? bjectorienterad programmering Sida 41

Unicode (forts) Unicode kan representera mer än en miljon tecken minsta datatypen i Java som kodar alla tecken är int. För att slippa använda 32 bitar för varje tecken använder man olika avkodningar (encodings), tex UTF-8, UTF-16, UTF-16BE, UTF16LE, UTF-32 Dessa kodar unicode till en sekvens av bytes, 16-bitars ord eller 32-bitars ord. bjectorienterad programmering Sida 42

Unicode (forts) Det finns också ofullständiga avkodningar. Java-system kan generera utskrift till följande format: US-ASCII och ISO-8859-1. Under Unix är ISO-8859-1 default. Genom optionen -encoding kan man även styra vilken kodning kompilatorn använder. (Exempel) bjectorienterad programmering Sida 43

Unitest, provkörning harpo$ java5 Unitest får us-ascii [66, 3f, 72] harpo$ java5 Unitest får iso-8859-1 [66, e5, 72] harpo$ java5 Unitest får utf-8 [66, c3, a5, 72] harpo$ java5 Unitest får utf-16 [fe, ff, 0, 66, 0, e5, 0, 72] harpo$ java5 Unitest får utf-16le [66, 0, e5, 0, 72, 0] harpo$ java5 Unitest får utf-32 Exception in thread "main" java.io.unsupportedencodingexception: utf-32 bjectorienterad programmering Sida 44