poikkeustenkäsittelylohkot try-catch

45
Poikkeustenkäsit tely- lohkot tMyn 1 Poikkeustenkäsittelylohkot try- catch Poikkeustilanteiden käsittelymekanismi toteutetaan varatuilla sanoilla try, throw ja catch. try aloittaa poikkeustenkäsittelylohkon, johon ohjelmoija kirjoittaa virhealttiin ohjelmakoodin. Jos try-lohkossa tapahtuu virhe, throw luo poikkeuksen, jonka catch-lohko käsittelee. catch-lohko sisältää kullekin virhetilanteelle käsittelijän. try- ja catch-lohkot sijaitsevat suoritusjärjestyksessä peräkkäin.

Upload: cana

Post on 21-Jan-2016

71 views

Category:

Documents


0 download

DESCRIPTION

Poikkeustenkäsittelylohkot try-catch. Poikkeustilanteiden käsittelymekanismi toteutetaan varatuilla sanoilla try, throw ja catch. try aloittaa poikkeustenkäsittelylohkon, johon ohjelmoija kirjoittaa virhealttiin ohjelmakoodin. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 1

Poikkeustenkäsittelylohkot try-catch

• Poikkeustilanteiden käsittelymekanismi toteutetaan varatuilla sanoilla try, throw ja catch.

• try aloittaa poikkeustenkäsittelylohkon, johon ohjelmoija kirjoittaa virhealttiin ohjelmakoodin.

• Jos try-lohkossa tapahtuu virhe, throw luo poikkeuksen, jonka catch-lohko käsittelee.

• catch-lohko sisältää kullekin virhetilanteelle käsittelijän.

• try- ja catch-lohkot sijaitsevat suoritusjärjestyksessä peräkkäin.

Page 2: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 2

• Poikkeus voi olla mitä tahansa tyyppiä oleva tieto tai olio.

• Usein on hyödyllistä määritellä poikkeusten käsittelyä varten erillinen luokka, johon voidaan määritellä tietojäseniä virhetilanteiden tallettamista varten.

• Kun poikkeustilanne syntyy, ohjelman eteneminen keskeytyy, ja ohjelma etsii sopivaa poikkeuksenkäsittelijää.

Page 3: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 3

• try-catch -lohkot:

try

{

//virhealtis toiminta

}

catch (tyyppi poikkeus)

{

//poikkeuskäsittely

}

catch(...)

{

//poikkeuskäsittely

}

Page 4: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 4

• try- ja catch -lohkot sijaitsevat suoritusjärjestyksessä peräkkäin.

• try-lohko sisältää ohjelmakoodin, joka voi aiheuttaa poikkeustilanteen.

• catch-lohkossa voidaan määritellä poikkeuksenkäsittelijä kullekin eri poikkeukselle.

• Poikkeuksenkäsittelijä on catch-lohkossa sijaitseva ohjelmakoodi.

• Poikkeustieto tai olio määritellään catch-sanan jäljessä olevien sulkeiden välissä.

Page 5: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 5

• tyyppi tarkoittaa poikkeustiedon tai olion tyyppiä ja poikkeus on tieto tai olio, johon voidaan viitata catch-lohkossa.

• Poikkeus on paikallinen lohkossa.• Jos sulkeiden sisällä on kolme pistettä, käsittelee

lohko minkä tahansa poikkeustilanteen.• Poikkeuskäsittelylohkot voivat olla myös sisäkkäisiä,

joten ne voivat muodostaa sisäkkäisiä tasoja.

Page 6: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 6

• Poikkeustilanteen aiheuttaminen varatulla sanalla throw:

throw (poikkeukset);

throw;

• Poikkeukset määritellään throw-sanan jäljessä.• Poikkeukset voivat olla sulkeiden sisällä.• Jos tilanteesta syntyy useita poikkeuksia, on

poikkeukset eroteltava pilkulla toisistaan.• throw-sanaa käytetään normaalisti try-lohkossa.• catch-lohkossa on kuitenkin mahdollista nostattaa

uusi poikkeustilanne.

Page 7: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 7

• Tällöin voidaan throw-sanaa käyttää ilman erityistä poikkeustietoa, jolloin poikkeuskäsittely siirretään seuraavaksi korkeammalle poikkeuskäsittelytasolle sisäkkäisissä poikkeuskäsittelyrakenteissa.

• Jos throw esiintyy uloimmalla tasolla, ohjelma kutsuu terminate-funktiota.

• Kokeillaan try-catch –rakenteen toimimista.

Page 8: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 8

• Jos poikkeustilanne aiheutetaan, mutta poikkeuksenkäsittelijää ei toteuteta, niin seurauksena on ohjelman ajon keskeytyminen, Fatal error:

Page 9: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 9

Page 10: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 10

Page 11: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 11

• PHP:n sisäänrakennettu poikkeuskäsittelyluokka näyttää seuraavanlaiselta:

Page 12: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 12

<?php class Exception {

protected $message = 'Unknown exception'; // exception messageprotected $code = 0; // user defined exception codeprotected $file; // source filename of exceptionprotected $line; // source line of exception

function __construct($message = null, $code = 0);

final function getMessage(); // message of exception final function getCode(); // code of exceptionfinal function getFile(); // source filenamefinal function getLine(); // source linefinal function getTrace(); // an array of the backtrace()final function getTraceAsString(); // formated string of trace

/* Overrideable */function __toString(); // formated string for display

}?>

Page 13: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 13

• Toteutetaan äskeinen ohjelma siten, että kirjoitetaan virhealtis koodi try-lohkoon ja toteutetaan virhetilanteelle käsittelijä catch-lohkoon:

Page 14: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 14

Page 15: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 15

Page 16: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 16

Page 17: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 17

Description

final public string Exception::getMessage ( void )

Returns the Exception message.

Parameters

This function has no parameters.

Return Values

Returns the Exception message as a string.

Page 18: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 18

• Otetaan poikkeuskäsittelyluokasta vielä käyttöön jäsenfunktio getCode(), muilta osin esimerkki on sama kuin edellä:

Page 19: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 19

Page 20: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 20

Page 21: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 21

Page 22: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 22

Description

final public int Exception::getCode ( void )

Returns the Exception code.

Parameters

This function has no parameters.

Return Values

Returns the Exception code as an integer.

Page 23: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 23

• Millähän rivillä virhe havaittiin?:

Page 24: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 24

Page 25: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 25

Page 26: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 26

Page 27: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 27

Descriptionfinal public int Exception::getLine ( void )Returns line number where the exception was thrown. ParametersThis function has no parameters.Return ValuesReturns the line number where the exception was thrown.

Page 28: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 28

• Sisäänrakennettua Exception-luokkaa voidaan käyttää kantaluokkana, ja periyttää siitä omia poikkeuskäsittelyluokkia erilaisten virhetilanteiden käsittelyyn.

• Koska omaan poikkeustenkäsittelyluokkaan periytetään kantaluokan jäsenfunktiot, voidaan johdetussa luokassa käyttää kantaluokan jäsenfunktioita (vaikkapa jäsenfunktioita getMessage(), getCode(), getFile()):

Page 29: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 29

Page 30: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 30

Page 31: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 31

Page 32: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 32

Descriptionfinal public string Exception::getFile ( void )Get the name of the file the exception was thrown from. ParametersThis function has no parameters.Return ValuesReturns the filename in which the exception was thrown.

Page 33: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 33

• Muutetaan edellistä esimerkkiä siten, että toteutetaan omaan poikkeustenkäsittelyluokkaan oma jäsenfunktio:

Page 34: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 34

Page 35: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 35

Page 36: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 36

Page 37: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 37

• try-lohkon perässä voi olla useampia käsittelijöitä (catch-lohkoja), ja ne tutkitaan siinä järjestyksessä kuin ne koodissa ovat.

• Ensimmäinen käsittelijä, jonka tyyppi vastaa poikkeuksen tyyppiä, suoritetaan.

Page 38: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 38

Page 39: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 39

Page 40: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 40

Page 41: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 41

Page 42: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 42

Page 43: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 43

Page 44: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 44

Page 45: Poikkeustenkäsittelylohkot try-catch

Poikkeustenkäsittely- lohkot

tMyn 45