Fördjupad Java. Undantagshantering. Fel



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

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

GUI Nyckelbeståndsdelar

Språkkonventioner och redigering av tal.

OOP Objekt-orienterad programmering

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

Föreläsning 14. Filhantering

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

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

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)

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

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

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

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

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

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

Länkade strukturer, parametriserade typer och undantag

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

F10 - Exceptions. ID1004 Objektorienterad programmering Fredrik Kilander

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

Lösningsförslag, tentamen FYTA11 Javaprogrammering

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

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

Fakulteten för ekonomi, kommunikation och IT. Corba. Datum: Mathias Andersson

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

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

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Instuderingsuppgifter läsvecka 6 - LÖSNINGAR

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

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

Objektorienterad programmering D2

Föreläsning 14. Träd och filhantering

LÖSNINGSFÖRSLAG TILL TENTAMEN PROGRAMMERINGSMETODIK MOM2 - JAVA, 4P.

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

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

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

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

/* * * Lösningsförslag tentamen DIT950 * Datum * */ /* * -1 - */ För samtliga gäller,se föreläsningsanteckningar.

Lösningar för tenta 2 DAT043,

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

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

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

Objektorienterad Programmering (TDDC77)

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

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

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

List.java. List.java. Printed by Tom Smedsaas

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Recitation 4. 2-D arrays. Exceptions

Tentamen Programmering fortsättningskurs DIT950

Objektorienterad programmering i Java

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

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

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

SMD 134 Objektorienterad programmering

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

Felhantering TDDD78, TDDE30, 729A

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

Kopiering av objekt i Java

1 Grafiska komponenter, händelsehantering

F4. programmeringsteknik och Matlab

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

OOP Objekt-orienterad programmering

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

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

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

Föreläsning 3. Stack

Lösningsförslag till tentamen

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

Testning av program. Verklig modell för programutveckling

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

Kap J 7-1 Mer om arv. (superklass) (subklass)

Föreläsning 12. Inre klasser Anonyma klasser Kloning I/O-ramverket

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

Objektorienterad Programmering (TDDC77)

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

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

Gästföreläsningen. Synpunkter?

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Erfarenheter från biljardprojektet. måndag 23 november 15

F5 Kodkvalitet. Programutveckling sker i faser. Livscykel, vidareutveckling och återanvändning

Lösningsförslag till tentamen i OOP, HI1027 Fredag 21 oktober 2011

Tentamen LÖSNINGSFÖRSLAG. c) Tilldelningen C x = new D() ger kompileringsfel eftersom klassen D är abstrakt.

Upplägg. Introduktion. Examination. Mål. Konsekvenser. Java. Kursen heter konstruktion, ej design eller formgivning.

Lösningsförslag till tentamen

Klassen javax.swing.timer

Föreläsning 12. Inre klasser Anonyma klasser Kloning I/O-ramverket

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

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

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

Gästföreläsningen. Synpunkter?

Klassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en

JAVAUTVECKLING LEKTION 7

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

if (n==null) { return null; } else { return new Node(n.data, copy(n.next));

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

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

Objektorienterad programutveckling, fk

Transkript:

Fördjupad Java 1 Undantagshantering Ett undantag (Exception) är ett objekt som påtalar en ovanlig eller felaktig situation i ett program. Undantag kastas av programmet och kan fångas och hanteras. Java har en färdig mängd uppsättning undantag, bl.a. NullPointerException och IndexOutOfBoundsException. 2 Fel Felmeddelanden, Errors, betecknar ofta ett allvarligare fel som inte kan åtgärdas och kastas vanligen av JVM och bör inte fångas. Ex. OutOfMemoryError. 3 1

Undantag Undantag kan hanteras på tre sätt: Hantera dem där de inträffar. Hantera dem i en annan del av programmet. Strunta i dem (undantaget tas då hand om VM och programmet avslutas efter att undantaget skrivits ut på skärmen). Rekommenderas ej. 4 Fånga Undantag Undantag fångas med en try-catch-sats. try-block måste följas av ett catch-block. Enbart angivet undantag fångas av catch. Flera catch-block kan anges efter ett try-block. try { System.out.println(Integer.parseString(numString)); catch (NumberFormatException exception) { System.out.println("String is not a number"); 5 Grupper av Undantag Alla undantag har ärvt klassen Exception. Utnyttjas för att fånga generella undantag. Undantag som ärvt RuntimeException, måste inte fångas (ex. NullPointerException), medan de övriga måste fångas. try { catch (NumberFormatException e) { catch (Exception e) { 6 2

Skicka vidare undantag En metod kan välja att skicka ett undantag vidare. Detta anges då i metodhuvudet med throws. Flera undantag kan anges i throws. public void openlogfile() throws FileNotFoundException { 7 Kasta undantag Man kan kasta undantag med throw. Observera att IllegalArgumentException är ett RuntimeExeption och inte behöver fångas. public Object getlistvalue(int index) { if (index < 0 index > length) throw new IllegalArgumentException(); 8 Egna undantag Det går att skapa egna undantag genom arv. Egna hierarkier av undantag kan skapas på detta sätt. public class MyProgramScrewedUpException extends RuntimeException { public MyProgramScrewedUpException() { super(); public MyProgramScrewedUpException(String msg) { super(msg); 9 3

finally Vill man vara säker på att något skall utföras innan man lämnar en metod (t.ex. stänga en fil, sätta ett tillstånd etc.) göras med ett finally-block. Måste stå tillsammans med try-catch. public void method() { try { catch(exception e) { finally { state = 1; 10 Strömmar Filhantering, utskrifter, inläsning m.m. hanteras i Java med s.k. strömmar (streams). Strömmar kan kopplas ihop som kedjor för att anpassa funktionaliteten efter sina egna behov. Finns två klasser av strömmar: bitströmmar -- Ström för i huvudsak binärt data. teckenströmmar -- Ström för tecken och textsträngar. 11 Bitströmmar All bitströmmar är härledda från InputStream -- ström för läsning. OutputStream -- ström för skrivning. 12 4

Bitströmmar Några vanliga bitsträmmar är: FileInputStream BufferedInputStream ObjectInputStream och motsvarande för OutputStream och dessutom PrintStream. 13 Teckenströmmar Teckenströmmar är härledda från: Reader ström för läsning. Writer ström för skrivning. Några vanliga teckenströmmar är: FileReader, BufferedReader, och motsvarande för Writer och dessutom PrintWriter. 14 Exempel Öppna en textfil och skriva text till den. // Öppna filen och skapa en ström till den. FileWriter fw = new FileWriter("MinFil.txt"); // För effektivitet använd en buffrad ström // och koppla den till filströmmen. BufferedWriter bw = new BufferedWriter(fw); // En anpassad ström för skriving är: PrintWriter pw = new PrintWriter(bw); // Skriv till filen. pw.println("innehåll i min första Java-fil"); // Stäng filen pw.close(); 15 5

Undantag De flesta filhanteringsmetoder kastar undantag som måste hanteras. Alla är de av typen IOException, t.ex. FileNotFoundException. try { FileWriter fw = new FileWriter("MinFil.txt"); catch(filenotfoundexception e) { System.err.println("Filen kunde inte öppnas"); catch(ioexception e) { System.err.println(Det uppstod ett fel); e.printstacktrace(); 16 in, out, err System finns färdiga strömmar. System.in Läsning från tangentbord (InputStream). System.out Skrivning till skärm (PrintStream). System.err Skrivning av felmeddelanden. (PrintStream). 17 Koppla bit- och teckenströmmar InputStreamReader isr = new InputStreamReader(System.in); BufferedReader stdin = new BufferedReader(isr); String s = stdin.readline(); 18 6

Gränssnitt Gemensamma egenskaper hos objekt utan arv. Exempel: En boll och ett hjul kan båda rulla, men har inga andra gemensamma egenskaper. En boll ''är en'' leksak och ett hjul ''är en'' bildel. Gränssnitt garanterar funktionalitet hos objekt. Används enbart till metoder. Ingen kod finns i gränssnitt, enbart prototyper. Skapas med interface och används med implements. 19 Exempel public interface Rollable { public void roll(); public class Ball implements Rollable extends Toy { public void roll() { public class Weal implements Rollabel extends Carpart { public void roll() { 20 Exempel forts. Rollable weal = new Weal(); Rollable ball = new Ball(); ball.roll(); weal.roll(); 21 7

Serialisering av Objekt Objekt kan serialiseras för att skrivas och läsas över strömmar. Vid serialisering översätts objektet till information (namn, värden på attribut m.m.) som sedan kan användas för att återskapa objektet. Objekt som skall serialiseras implementerar gränssnittet Serializable. Om objektet är ett aggregat måste även attributen ha implementerat Serializable. 22 Exempel public class Data implements Serializable { public int value1; public float value2; FileOutputStream fs = new FileOutputStream("Datafil.dat"); ObjectOutputStream os = new ObjectOutputStream(fs); Data[] data = new Data[2]; data[0] = new Data(3, -0.2); data[1] = new Data(2, 5.3); os.writeint(data.length); os.writeobject(data[0]); os.writeobject(data[1]); 23 Inre klasser Kan skapa klasser inom klasser. Klassen enbart åtkomlig via sin moderklass. Praktiskt för skydd av internt data. 24 8

Exempel public class List { protected class ListItem { public ListItem next = null; public ListItem previous = null; public Object value = null; public ListItem(Object value) { this.value = value; protected ListItem current = null; protected int index = 0; protected int length = 0; 25 Fortsättning public void addbefore(object value) { ListItem item = new ListItem(value); if (isempty()) { current = item; else { item.previous = current.previous; item.next = current; if (current.privious!= null) current.previous.next = item; current.previous = item; index++; length++; 26 9