INF1010 våren 2019 Onsdag 30. januar. Mer om unntak i Java (med litt repetisjon av I/O først)

Like dokumenter
INF1010 våren 2017 Onsdag 25. januar. Litt om unntak i Java

INF1010 våren 2018 tirsdag 23. januar

INF1010 våren Arv og subklasser del 1 (pluss litt I/O og unntaksbehandling)

Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

INF1010 våren Arv og subklasser del 1 pluss (hvis vi har tid) litt om Unntak, IO og Scanner-klassen

Inf1010 Våren Feilsituasjoner og unntak i Java. Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

Oversikt. Feil i programmet hva skjer? Array indeks utenfor sine grenser. Inf1010 Våren Feilsituasjoner og unntak i Java

INF1010 våren Arv og subklasser - del 2

Inf1010 Våren Feilsituasjoner og unntak i Java. Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

INF1010 våren Generalisering -spesialisering Gjenbruk av klasser. Ved arv. Klasse-hierarkier. Stein Gjessing.

Inf1010 Våren Feilsituasjoner og unntak i Java. Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

Oversikt. Array indeks utenfor sine grenser. Feil i programmet hva skjer?

Oversikt. Feil i programmet hva skjer? Array indeks utenfor sine grenser. Inf1010 Våren Feilsituasjoner og unntak i Java

Uke 5, 27. januar Arv og subklasser del I. Stein Gjessing Institutt for informatikk

INF 1010, vår 2005 Løsningsforslag uke 11

INF1010 våren 2010 Torsdag 4. februar. Arv og subklasser del I. Emneoversikt subklasser (2 uker) Hva er en subklasse? Eksempel: Universitetsregister

INF1010 våren Arv og subklasser del I

IN Notat om I/O i Java

INF Notat om I/O i Java

INF1000-SIKT - Notat om I/O i Java

Leksjon 7. Filer og unntak

Enkel lesing og skriving i Java

Repetisjon. INF gruppe 13

Litt om pakker og mest om data inn og ut

Kapittel 11: Unntakshåndtering. Java som første programmeringsspråk

Kapittel 13: Unntakshåndtering

Kapittel 13: Unntakshåndtering

Videregående programmering 6

Kapittel 11: Unntakshåndtering. Java som første programmeringsspråk

Fra Python til Java, del 2

Bruk av class Scanner, FileWriter og Formatter som alternativ til EasyIO i INF1000.

Bruk av class Scanner, split(), FileWriter og Formatter som alternativ til easyio i INF1000.

Jentetreff INF1000 Debugging i Java

IN-OO1-EVU Dag 3. Stein Gjessing. Kapittel 4: I/O, if og unntak (exceptions) Kapittel 5: While, switch, mer I/O Kapittel 6: Mengder av objekter

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Eivind Storm Aarnæs

Lese fra fil. INF1000 : Forelesning 5. Eksempel. De vanligste lesemetodene. Metoder:

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 15.

Post-it spørsmål fra timen (Arv og subklasser)

D Feilhåndtering og unntaksklasser

Forelesning inf Java 4

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Ole Christian Lingjærde, 12. september 2013

Forelesning inf Java 4

INF1010, 21. februar Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

INF1010 våren januar. Objektorientering i Java

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

Læringsmål for forelesningen

Forelesningsquiz. Forelesning inf Java 5. Sett dere to (eller tre) sammen og besvar de fire spørsmålene på utdelt ark. Tid: 15 min.

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

Klasser skal lages slik at de i minst mulig grad er avhengig av at klienten gjør bestemte ting STOL ALDRI PÅ KLIENTEN!

Dagens tema: Kompilatorens struktur. De ulike modulene Prosjektet. Oppbyggingen Pakker i Java Avbrudd («exceptions») Enum-klasser i Java

INF1000 : Forelesning 5

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

TOD063 Datastrukturer og algoritmer

Forelesning inf Java 5

Forelesning inf Java 5

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

IN1010 våren januar. Objektorientering i Java

Stein Gjessing 11. nov IN-OO1-EVU Dag 3. Stein Gjessing

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

UNIVERSITETET I OSLO

INF2100. Oppgaver 26. september til 1. oktober 2007

Løsningsforslag Test 2

INF1010 våren Arv og subklasser, del 2

INF1010 Tråder J. Marit Nybakken Motivasjon. Å lage en tråd

INF1000 : Forelesning 4

Eksempel: Body Mass Index (BMI) Forelesning inf Java 3. Ferdig program (første del) Ferdig program (siste del)

INF Løsning på seminaropppgaver til uke 8

Ta inn og ut av 2D-array. Java 6. Liste over ulike verdier i 2D-array. Det ferdige programmet. Vi skal lage et program som illustrerer hvordan man

UNIVERSITETET I OSLO

import java.io.*; import java.util.*; import javagently.text;

Eksempel: Body Mass Index (BMI)

i=0 i=1 Repetisjon: nesting av løkker INF1000 : Forelesning 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker j=0 j=1 j=2 j=3 j=4

Kort repetisjon av doble (nestede) løkker Mer om 1D-arrayer Introduksjon til 2D-arrayer Metoder

UNIVERSITETET I OSLO

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

INF1000 Behandling av tekster

3 emner i dag! INF1000 Uke 5. Objekter og pekere. null. Litt om objekter, pekere og null Filer og easyio Litt mer om tekster

INF1010 våren 2017 Torsdag 2. februar. Arv og subklasser - del 2

Løsningsforslag ukeoppg. 3: sep (INF Høst 2011)

Hittil har programmene kommunisert med omverden via tastatur og skjerm Ønskelig at data kan leve fra en kjøring til neste

IN1010 våren 2018 Tirsdag 6. februar. Arv og subklasser - del 2

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

INF 1000 høsten 2011 Uke september

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

2 Om statiske variable/konstanter og statiske metoder.

UNIVERSITETET I OSLO

INF1010 våren Arv og subklasser - del 2

INF1000 undervisningen INF 1000 høsten 2011 Uke september

"Nelsons kaffebutikk"

INF1000 (Uke 4) Mer om forgreninger, While-løkker

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I Løsningsforslag

Forkurs INF1010. Dag 2. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 14.

Transkript:

INF1010 våren 2019 Onsdag 30. januar Mer om unntak i Java (med litt repetisjon av I/O først) Stein Gjessing

Lesing fra terminal og fil navn: mininn Bruk Scanner: Scanner mininn = new Scanner(<fil>); Type: Scanner boolean hasnext() int nextint() Se Scanner i java-biblioteket F.eks. ved å google java 8 api Scanner double nextdouble(). String nextline() Objekt av klassen Scanner

Klassen Scanner Leser en og en linje eller ett og ett token Tokens er vanligvis adskilt av blanke Kan sjekke om det er flere linjer eller token igjen på fila Kan lese og konvertere token til basale typer som f.eks. int og double Bruk CNTRL-D for slutt på input fra terminal 3

Feilhåndtering n En metode som kan komme til å gjøre en IO-feil på fil må enten behandle denne selv, eller kaste feilen videre (også i main): public void mittprogmedio( ) throws IOException { < kode som gjør fil-behandling> I Java-biblioteket: class IOException extends Exception {... throws er et Java nøkkelord 4

Metoder som gjør filbehandling kan kaste unntaket til main import java.io.*; class FilTestMedMetode { public static void main (String [ ] args) throws FileNotFoundException { skrivtilfil(); private static void skrivtilfil( ) throws FileNotFoundException { PrintWriter filut = new PrintWriter ( minutfil.txt ); filut.println( Meget enkel testutskrift nr. + 17 ); filut.close( );

Eller behandle unntaket selv: main filut import java.io.*; try { PrintWriter filut = new PrintWriter ( minutfil.txt ); // Utskrift skjer som til skjerm: filut.println( utskrift + 17 ): // For at innholdet på den nye filen skal // bevares må vi til slutt si: Dette objektet skriver på filen minutfil.txt void println() minutfil.txt filut.close( ); catch (FileNotFoundException f) {... 6

Når du behandle unntaket selv (til høyre) import java.io.*; class FilTest { public static void main (String [ ] args) throws FileNotFoundException { PrintWriter filut = new PrintWriter ( minutfil.txt ); filut.println( Utskrift + 17 ); filut.close( ); import java.io.*; class FilTest { public static void main (String [ ] args) { try { PrintWriter filut = new PrintWriter ( minutfil.txt ); filut.println( Utskrift + 17 ); filut.close( ); catch (FileNotFoundException f) { System.out.println ( Fant ikke filen );

Innlesing fra terminal import java.util.*; class LesFraTermNavnAlder { public static void main (String [ ] args) { int alder; String navn; Scanner mininn = new Scanner (System.in); System.out.print(" Skriv navn: "); navn = mininn.nextline(); System.out.print(" Skriv alder: "); alder = mininn.nextint(); System.out.println(" Du heter " + navn + " og er " + alder + " år" ); 8

Innlesing fra fil import java.util.*; import java.io.*; class LesFraTermNavnAlder throws FileNotFoundException { public static void main (String [ ] args) { int alder; String navn; Scanner mininn = new Scanner (new File ("minfil.txt ) ); navn = mininn.nextline(); alder = mininn.nextint(); System.out.println(" Personen heter " + navn + " og er " + alder + " aar" ); minfil.txt Per Pettersen 21 FileNotFoundException er dette spesielle unntaket IOException er et mer generelt unntak Exception er det mest generelle unntaket Subklasser 9

Innlesing fra fil - feil import java.util.*; import java.io.*; class LesFraTermNavnAlder { public static void main (String [ ] args) { int alder; String navn; Scanner mininn = new Scanner (new File ("minfil.txt ) ); navn = mininn.nextline(); alder = mininn.nextint(); System.out.println(" Personen heter " + navn + " og er " + alder + " aar" ); minfil.txt Per Pettersen 21 java:8: error: unreported exception FileNotFoundException; must be caught or declared to be thrown Scanner mininn = new Scanner (new File ("minfil.txt")); ^ 1 error

Innlesing av heltall fra fil utskrift på skjerm main filinn boolean hasnext() import java.io.*; import java.util.*; class LesFraFil { Objekt av klassen Scanner int nextint() public static void main (String [ ] args) throws FileNotFoundException { Scanner filinn = new Scanner (new File ("minfil.txt ) ); int tall; while(filinn.hasnext()) { tall = terminalinn.nextint(); System.out.println(tall); DETTE GÅR BRA HVIS FILEN BARE INNE- HOLDER HELTALL!! Kaster IOunntak til runtimesystemet 11

import java.io.*; Utskrift til fil main filut class FilTest { public static void main (String [ ] args) throws FileNotFoundException { PrintWriter filut = new PrintWriter ( minutfil.txt ); // Utskrift skjer som til skjerm: filut.println( Utskrift + 17 ); Dette objektet skriver på filen minutfil.txt void println() minutfil.txt // For at innholdet på den nye filen skal // bevares må vi til slutt si: filut.close( ); 12

Array indeks utenfor sine grenser int [ ] tallvektor; tallvektor = new int [100]; tallvektor[101] = 17; Seacobra:programmer steing$ javac Test.java Seacobra:programmer steing$ java Test Exception in thread "main" java.lang.arrayindexoutofboundsexception: 101 at Test(Test.java:8) Seacobra:programmer steing$ 13

Fange divisjon med 0 public class TryTest Her tar programmet { seg av hele feilen public static void main ( String [ ] args) { int i=1; for (int j=0; j < 5; j++) try{ i = 10/j; System.out.println("Det gikk OK, i:" + i + ", j:" + j); catch (Exception e) { System.out.println("Feil i uttrykk: "+ e.getmessage( )); snidil> java TryTest Feil i uttrykk: / by zero Det gikk OK, i:10, j:1 Det gikk OK, i:5, j:2 Det gikk OK, i:3, j:3 Det gikk OK, i:2, j:4 snidil> 14

Generelt om unntak / feil - behandling i Java n Mye kode kan feile og feilaktige situasjoner (unntak) kan oppstå. n Kode som kan feile kan - og som oftest må - vi legge følgende rundt: Feiler koden blir denne blokken utført med feilobjektet som e peker på som parameter try { <... Kode som kan feile > catch (Exception e) { <... Gjør noe med feilen, prøv å rett opp...> 15

Fem reserverte Java ord n try - Står foran en blokk som er usikker dvs. der det kan oppstå et unntak n catch - Står foran en blokk som behandler et unntak. Har en referanse til et unntaksobjekt som parameter n finally - blir alltid utført (mer senere) n throw - Starter å kaste et unntak throw <en peker til et unntaksobjekt> f.eks throw new Unntak(); n throws - Kaster et unntak videre Brukes i overskriften på en metode som ikke selv vil behandle et unntak n Viktigst bruk: try { <kode som kan feile> catch (Unntaksklasse u) { <behandle unntaket, u peker på et objekt som beskriver unntaket> 16

17 Unntak kan oppstå i egen kode try { <KODE SOM KAN FEILE> <Når det skjer noe galt f.eks. at en referanse er null:> throw new Unntaksklasse( );........ catch (Unntaksklasse unt) { < Unntaksbehandling. Dette hoppes over når intet unormalt/galt/feil har hendt > < her fortsetter programmet både etter normal utføring og etter behandling av eventuelle unntak > Her bestemmer vi selv at et unntak skal oppstå/skje På forhånd har vi deklarert: class Unntaksklasse extends Exception {...

inne i metoden a: Når unntak oppstår i en annen metode (og ikke behandles der) try {.... kall på metoden b x = b ( );.... catch (Unntaksklasse unt) { < Unntaksbehandling. Dette hoppes over når intet unormalt har hendt > < her fortsetter programmet både etter normal utføring og etter behandling av eventuelle unntak> Metoden b feiler kanskje fordi kontrakten for kall på metoden ikke ble oppfylt. int b( ) throws Unntaksklasse { inne i metoden b: En feil oppdages: throw new Unntaksklasse ( ) ; Normal retur fra b til a: return 17; Unntaksklasse er en klasse som på forhånd er deklarert (egendefinert eller definert i Java-biblioteket) som en subklasse av klassen Exception (se forrige side). 18

Java-bibliotekets klassehierarki for unntak Throwable Vanskelig å gjøre noe med Error RuntimeException Exception IOException VirtualMachineError IOError Må fanges NullPointerException ArithmeticException Unntak i dette subtreet bør fanges 19