unntak nesten uten arv

Upload: hallvard

Post on 30-May-2018

234 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/14/2019 Unntak Nesten Uten Arv

    1/32

    1

    Lringsml for forelesningen

    Objektorientering Hndtering av unntak (eng: exceptions)

    Java-programmering Hndtering av unntak

    (kapittel 17 i Liang)

    Exception-objekter og klasser

    try, catch og finally throw og throws

    Eclipse Se p klassehierarki med F4

  • 8/14/2019 Unntak Nesten Uten Arv

    2/32

    2

    Unntak (eng: exceptions)

    I et program er det mye som kan g galt koden kan inneholde feil som viser seg ved kjring, f.eks. at

    attributter fr gale verdier eller det er inkonsistens mellom to ender

    av en relasjon

    unskede, men forventede ting skjer, som det vil kludre til koden

    hndtere overalt i koden, f.eks. at en filoverfring brytes og m

    gjenopptas senere

    omgivelsene kan endre seg underveis, slik at uventede situasjoneroppstr, f.eks. en fil som slettes mens programmet leser fra eller

    skriver til den

    Hva gjr en programmerer med slikt?

  • 8/14/2019 Unntak Nesten Uten Arv

    3/32

    3

    Unntak (eng: exceptions)

    Det finnes to prinsippielt ulike strategier for hndtere slikt:

    2. En kan (fortvilt) prve

    unng

    feil, f.eks. ved bedre metoder for avdekke behov og krav grundig gjennomgang av kode fr den settes i produksjon

    bedre og grundigere testing, slik at flere feil lukes bort

    3. En kan oppdage og reagere p dem p en ryddig

    mte validering av input fra omgivelsene (filer, nettet, brukere, ...) og

    parameterverdier til metoder, slik at feil ikke fr forplante seg videre.

  • 8/14/2019 Unntak Nesten Uten Arv

    4/32

    4

    Unntak (eng: exceptions)

    1. En kan (fortvilt) prve unng feil, f.eks. ved

    2. En kan oppdage og reagere p dem p en ryddig mte

    Det vil alltid gjenst feil en ikke har oppdaget ogsituasjoner en ikke har forutsett, som gjr at en m regnemed unntak.

    Det har vist seg vre ryddigere skrive kode fornormal-tilfellet (hva n det mtte vre) og hndtere

    unntakene vha. en egen unntaksmekanisme. Java har en mekanisme for si fra om og hndtere slike

    unntak, som gjr at kode for normalsituasjonen ikke blirfor tilkludret.

  • 8/14/2019 Unntak Nesten Uten Arv

    5/32

    5

    Unntaksmekanismen

    Java sin unntaksmekanisme er todelt

    throw brukes for si fra om at et unntak har oppsttt(eng: throw an exception)

    try { ... }catch (...){ ... }brukes

    for angi at en er beredt til hndtere en bestemt typeunntak (eng: catch an exception)

  • 8/14/2019 Unntak Nesten Uten Arv

    6/32

    6

    Exception-objekter

    Instanser av (subklasser av) Exception,brukes for lagre data om unntaket

    Exception-objektet br inneholder relevant informasjon om hva

    som gikk galt. catch-setningen angir hvilke typer Exception-instanser den kan ta

    imot, dvs. instanser av hvilke subklasser den hndterer. Data fraException-instansen som er kastet kan brukes for finne ut hvasom skal gjres.

    N

    r unntaket angis vha. throw, nsteskallene tilbake (som ved return, men utenreturverdier) til nrmeste catch sompasser til unntaket

  • 8/14/2019 Unntak Nesten Uten Arv

    7/32

    7

    Eksempel p bruk av try/catch (1)

    I vrens aller frste forelesningstime lagde vi etprogram tok en radius som input vha.programargumenter og beregnet omkrets og areal:

    Hva skjer nr vi ikke skriver inn noenprogramargumenter?

  • 8/14/2019 Unntak Nesten Uten Arv

    8/32

    8

    Eksempel p bruk av try/catch (2)

    Vi sier fra at vi kan hndtere dette unntaket vha try/catch:

    try { ... } brukes for avgrense hvilken kode vinsker beskytte mot unntak. catch(...){ ... } brukes for angi hva slags

    unntak vi kan hndtere og hva vi nsker gjre dersomunntaket oppstr og fanges opp.

  • 8/14/2019 Unntak Nesten Uten Arv

    9/32

    9

    Eksempel p bruk av try/catch (3)

    Vi angir tre-komma-fjorten som programargument:

    En ny type feil kan fanges opp med en ny catch-blokk:

    Vi kan fange opp flere typer feil med flere catch-blokker, eller mankan fange opp flere typer vha. en mer generell catch-blokk:

  • 8/14/2019 Unntak Nesten Uten Arv

    10/32

    10

    Eksempel p bruk av try/catch (4)

    try { ... } catch ( ... ) { ... } fanger opp alle angitte typer unntak somoppstr mens try-delen utfres, selv om det skjer i et nstet kallog/eller i en annen klasse/objekt:

    Her oppstr

    unntaket

    Her fanges unntaket opp

  • 8/14/2019 Unntak Nesten Uten Arv

    11/32

    11

    Lynkurs i arv

    Klasser struktureresi et hierarki, f.eks.C1, C11, C12, C2,C21, C22

    Et objekt laget somen instans av en

    klasse C, erinstanceof Cog alle C sinesuperklasser

    C2 C1

    Object

    C21 C11C22 C12

    peker p

    superklassen

    C21 c21 = new C21();

    c21 instanceof C2 = = true

  • 8/14/2019 Unntak Nesten Uten Arv

    12/32

    12

    Exception-hierarkiException

    IOEx.RuntimeEx.

    IllegalArgumentEx.

    NumberFormatEx.

    NullPointerEx.

    ArrayI.O.O.B.Ex.StringI.O.O.B.Ex.

    IndexOutOfBoundsEx.

    FileNotFoundEx.

  • 8/14/2019 Unntak Nesten Uten Arv

    13/32

  • 8/14/2019 Unntak Nesten Uten Arv

    14/32

    14

    throw

    Du br selv bruke throw nr du oppdager atnoe er galt, som ikke kan hndteres p engod mte der problemet oppdages, f.eks.

    bruke throw newIllegalArgumentException(...),dersom du oppdager at et parameter har enugyldig verdi

    Vi skal etterhvert se hvordan en kandefinere egne typer unntaksklasser(Exception-subklasser)

  • 8/14/2019 Unntak Nesten Uten Arv

    15/32

    15

    try { ... } catch { ... }

    oppsummert throw sier fra at et unntak har oppsttt

    try/catch sier fra at vi i lpet av utfrelsen av en

    kodesnutt kan h

    ndtere en eller flere typer unntak,dersom de mtte oppst

    Dersom ingen unntak oppstr, vil catch-delen ikkebli utfrt

    Dersom et unntak oppstr og vi har en tilsvarendecatch-del, vil denne bli utfrt

    Koden etter try/catch-blokken vil s fortsette

  • 8/14/2019 Unntak Nesten Uten Arv

    16/32

    16

    Boksmodellen

    metode1 har entry/catch-blokk

    metode3 bruker throwfor angi et unntak

    aktivering av metode3og metode2 brytes og

    metode1 fortsetter icatch-delen sompasser tilunntakstypen

    metode1(int) : minKlasse

    catch Exception

    metode3(int) : minKlasse

    ...

    metode2(int) : minKlasse...

    metode1(int) : minKlasse

    ...

  • 8/14/2019 Unntak Nesten Uten Arv

    17/32

  • 8/14/2019 Unntak Nesten Uten Arv

    18/32

  • 8/14/2019 Unntak Nesten Uten Arv

    19/32

    19

    Egendefinerte unntakstyper

    Egne unntakstyper kan defineres ved lage en subklasse av Exceptioneller en av dennes subklasser

    Eksempel, unntak for ulovlig radiuser

    En unntaksklasse er en helt vanlig klasse, og m flgelig definerekonstruktrer og bruke super(...) for kalle superklassens konstruktr

    Egne unntaksklasser br inneholde detaljer om hva som var feil ogevt. en redefinering av getMessage()

  • 8/14/2019 Unntak Nesten Uten Arv

    20/32

    20

    RuntimeException vs. Exception

    RuntimeException (skalt unchecked) er en subklasse av

    Exception for unntak som er uventede (i en eller annen

    forstand)

    Feil i koden eller feil bruk av koden

    Andre typer, (skalt checked) dvs. subklasser av Exception

    som ikke samtidig er subklasser av RuntimeException

    brukes for feil som er forventet (i en eller annen forstand)

    Forventede komplikasjoner, skapt av omgivelsene

  • 8/14/2019 Unntak Nesten Uten Arv

    21/32

  • 8/14/2019 Unntak Nesten Uten Arv

    22/32

    22

    throws

    To spesifikke krav stilles dersom en metode

    kan komme til bli avbrutt av et checked

    unntak (som ikke er en RuntimeEx.): den m eksplisitt deklarere unntakstypen(e) vha. throws

    etter parameterlista

    metoder som kaller en metode med en slik deklarasjon, m enten

    fange opp unntaket vha. try/catch for denne unntakstypen eller

    selv deklarere unntakstypen vha, throws

    IOException kan f.eks. ikke ignoreres

  • 8/14/2019 Unntak Nesten Uten Arv

    23/32

    23

    throws

    Ved riktig valg av superklasse for

    egendefinerte unntaksklasser, kan en

    alts tvinge kallende metoder til

    enten hndtere unntaket eller si fra at

    unntaket kan oppst

  • 8/14/2019 Unntak Nesten Uten Arv

    24/32

    24

    La oss ta en titt p

    unntakshierarkiet Viktige RuntimeException-klasser

    NullPointerException gjre noe med null

    ClassCastException prver caste verdi til ulovlig klasse

    IndexOutOfBoundsException negativ eller for stor index tiltabell- eller String-operasjoner

    NoSuchElementException for mange next() p en Iterator

    UnsupportedOperationException angis at valgfri metode igrensesnitt ikke er implementert, f.eks. remove i Iterator

    IllegalArgumentException feil ved validering av argument NumberFormatException feil i tallformat

    Viktige Exception-klasser IOException

  • 8/14/2019 Unntak Nesten Uten Arv

    25/32

    25

    java.io.IOException

    IOException er en Exception som mfanges opp eller deklareres at kan

    oppst, dvs. enten try { ... } catch (IOException ioe) { ... }, eller

    throws IOException

    IO-feil er s

    pass vanlige og alvorlige,og m derfor hndteres.

    Eksempel p lesing fra fil flger...

  • 8/14/2019 Unntak Nesten Uten Arv

    26/32

  • 8/14/2019 Unntak Nesten Uten Arv

    27/32

    27

    M sikre oss at

    reader.close() blir kalt

    Hva skjer hvis vi

    underveis fr en

    annen type Exception?

  • 8/14/2019 Unntak Nesten Uten Arv

    28/32

  • 8/14/2019 Unntak Nesten Uten Arv

    29/32

    29

    finally sikrer at reader.close()

    alltid blir kalt

    Hva skjer hvis vi fr en feil

    frreader settes?

  • 8/14/2019 Unntak Nesten Uten Arv

    30/32

    30

    Ikke bruk try/catch i utide

    try {Iterator it = liste.iterator();

    while (true) {

    Object o = it.next();// gjr noe med o her

    }} catch (Exception e) {

    } Her brukes try/catch som vanlig kontrollstruktur,

    hvor it.hasNext() skulle vrt brukt. Fy, fy!

  • 8/14/2019 Unntak Nesten Uten Arv

    31/32

    31

    Lringsml for forelesningen

    Objektorientering Hndtering av unntak (eng: exceptions)

    Java-programmering Hndtering av unntak

    Exception-objekter og klasser

    try, catch og finally

    throw og throws

    Eclipse Se p klassehierarki med F4

  • 8/14/2019 Unntak Nesten Uten Arv

    32/32

    32

    Har du ndd lringsmlene?

    Java-programmering Lag en NorskeTall-klasse som parser norske tall skrevet

    med ord, f.eks. en, tjueen, frtiseks osv. for tall opp til

    100.

    Lag en egen type unntak som subklasser

    NumberFormatException, som NorskeTall-klassen bruker til

    si fra om feilformatterte tall. Det skal angis om feilen var

    for hele tallet (dvs. uforstelig), tierdelen (f.eks. xxxen

    eller enerdelen (f.eks. tjueti).

    Hva skjer nr du endrer koden slik at du subklasser

    Exception istedenfor NumberFormatException, og hva m

    du gjre?