Poikkeustenkäsittely  Mitä poikkeustenkäsittely tarkoittaa?  Poikkeuksen käsitteleminen  Poikkeusluokkien hierarkia  Poikkeuksen heittäminen 1.

Slides:



Advertisements
Samankaltaiset esitykset
Tuloksellinen Java-ohjelmointi Luku 3 Luokkien käyttäminen
Advertisements

Minimaalinen Java-ohjelma •Kaikki ohjelmakoodi on luokkamäärityksen sisällä •Ohjelma käynnistyy ”public static void main(String[] args)”-metodista •System.out.print()
Olio-ohjelmoinnin perusteet luento 3: Muuttujista ja funktioista Sami Jantunen LTY/Tietotekniikan osasto.
© Jukka Harju, Viittausmuuttujat. © Jukka Harju, Viittaukset •Viittausmuuttuja sisältää tiedon siitä missä muistipaikassa olio.
1 Ehtolausekkeet Ehdot, valintalausekkeet Boolean-algebra.
Nämä kalvot on lisensoitu Creative Commons Attribution-ShareAlike 1
Jukka Juslin Poikkeukset ja niiden paikallistaminen * Jukka Juslin * Liittyy oppikirjan lukuun 11.
Taulukot: Array Taulukko Javassa pitää aina perustaa (new)
22. Taulukot.
Ohjelmointitaito (ict1td002, 12 op) Syksy 2008
Näytölle tulostaminen. 7.2 Sisällys System.out.println - ja System.out.print -operaatiot. Tulostus erikoismerkeillä. Edistyneempää tulosteiden.
Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 4 Toistolauseet
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Yksinkertaiset graafiset syöttö- ja tulostustoiminnot.
Poikkeuskäsittely- lohkot tMyn1 Poikkeuskäsittelylohkot try-catch Poikkeustilanteiden käsittelymekanismi toteutetaan varatuilla sanoilla try, throw ja.
© Jukka Harju, Jukka Juslin Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 9 Poikkeuskäsittely.
9. Periytyminen Javassa.
Toiston tekeminen Javalla  Mikä toistorakenne on?  while toistorakenne  do-while toistorakenne  for toistorakenne 1.
1 Kertaus koetta varten oleellisista asioista Jukka Juslin.
7. Oliot ja viitteet.
Map-luokka Mikä Map on? Mapin esittely ja luonti Map-luokan metodeja Mappiin lisääminen Mapin läpikäynti Mapista poistaminen 1.
ict1td002 - Copyright Raine Kauppinen 1 Alkuarvot ja tyyppimuunnokset (1/5)  Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int.
String-vertailusta ja Scannerin käytöstä (1/2)
Metodit – Arvotyyppi Ellei metodi palauta arvoa, sen arvotyyppi on void Tällöin ”return;”-lauseke ei ole metodissa pakollinen, vaikka sen käyttö on sallittua.
20. Javan omat luokat.
Kuinka niitä käsitellään
1 DataOutputStream ja DataInputStream DataOutputStream:lla voidaan tallentaa perustietotyyppien arvoja binäärimuotoiseen tiedostoon DataInputStream:lla.
1 Tietovirrat ja niiden suunnat Tietovirralla on aina suunta Tiedostoon tallentaessa käytetään OutputStream-luokasta perittyjä luokkia Tiedostosta luettaessa.
4. Attribuutit 4.1. Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2.
5. Kapselointi Yleistä Kapseloinnilla (encapsulation) tarkoitetaan luokan tietojen ja toimintojen pakkaamista yhdeksi suojatuksi kokonaisuudeksi.
10. Abstrakti luokka Johdanto Abstrakti luokka (abstract class) poikkeaa konkreettisesta luokasta (ei-abstrakti luokka) siten, että siitä ei.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Näppäimistöltä lukeminen Sisällys Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä. In -luokka.
Hyvä ohjelmointitapa (osa 2) Yleistä Lisää hyviä ohjelmointikäytäntöjä: − Jaa pitkä koodi osiin. − Käytä attribuutteja säästeliäästi.
22. Taulukot.
Poikkeukset Yleistä Virheeseen varautuminen tarkoittaa sitä, että ohjelmoija huomioi koodia kirjoittaessaan ajonaikaisen virheen mahdollisuuden.
© Jukka Juslin1 Tiedostot Tuloksellinen Java-ohjelmointi.
Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen
@ Leena Lahtinen TIETOKONEOHJELMAN RAKENNE OHJELMALLA ON KAKSI OSAA:  MÄÄRITYSOSA TIETOJEN KUVAUKSIA VARTEN  SUORITUSOSA TIETOJEN KÄSITTELYÄ.
© Jukka Juslin1 Osio2 Olio-ohjelmointi: Merkkijonot eli Stringit Jukka Juslin.
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely.
2. Lisää Java-ohjelmoinnin alkeita
Poikkeustenkäsittely- lohkot tMyn1 Poikkeustenkäsittelylohkot try-catch Poikkeustilanteiden käsittelymekanismi toteutetaan varatuilla sanoilla try, throw.
Tiedostojen käsittely
Olioiden taulukointi Perustaulukon käyttö Luokan ilmentymät voidaan tallettaa taulukkoon samoin kuin muuttujat Esimerkki talletetaan taulukkoon opintojaksojen.
Javan oliovirrat eli oliotiedostojen käsittely. Olio- eli objektitiedostojen käsittely Käsittely täysin samanlaista kuin muiden tiedostojen 1.Otetaan.
1 © Jukka Juslin Luokat, attribuutit ja metodit Yleistietoa: seuraavalla koulutusviikolla tarkempi käsittely.
14. Poikkeukset Sisällys Johdanto poikkeuksiin. Poikkeusten käsittely: − Poikkeusten käsittely paikallisesti. − Poikkeusten heittäminen. Exception.
Sähköpostin lähetys Java- ohjelmasta Jukka Juslin.
15. Ohjelmoinnin tekniikkaa
Tiedostot. 8.2 Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen.
String-vertailusta ja Scannerin käytöstä (1/2)
5. Kapselointi.
6. Tiedostot.
Poikkeustenkäsittelylohkot try-catch
14. Poikkeukset.
Kuinka niitä käsitellään
8. Näppäimistöltä lukeminen
7. Hyvä ohjelmointitapa..
15. Ohjelmoinnin tekniikkaa
3. Luokat, oliot ja metodit Java-kielessä (Lausekielinen ohjelmointi I ja II –kursseilla opitun kertausta.)
Toisto Toistolausekkeet for, while(ehto){…} ja do {…} while(ehto)
8. Näppäimistöltä lukeminen
Kuinka niitä käsitellään
7. Oliot ja viitteet.
15. Ohjelmoinnin tekniikkaa
14. Poikkeukset.
14. Poikkeukset.
4. Luokan testaus ja käyttö olion kautta
eli oliotiedostojen käsittely
Esityksen transkriptio:

Poikkeustenkäsittely  Mitä poikkeustenkäsittely tarkoittaa?  Poikkeuksen käsitteleminen  Poikkeusluokkien hierarkia  Poikkeuksen heittäminen 1

Mitä poikkeustenkäsittely tarkoittaa?  Poikkeus (Exception) on tarkoittaa sitä, että ohjelmassa tapahtuu jotain epänormaalia esim. ohjelma kaatuu kesken suorituksen. Ohjelman kaatuminen voi johtua mm. siitä, että käyttäjä syöttää numeron sijaan kirjaimia.  Jotta ohjelma toimisi poikkeuksesta huolimatta, ohjelmaan voidaan koodata poikkeustenkäsittely.  Osa poikkeuksista on sellaisia, jotka on pakko käsitellä (esim. varautuminen tiedostoja käsiteltäessä tiedoston puuttumiseen) tai vapaaehtoisia (esim. varautuminen virheelliseen syötteeseen). 2

Poikkeusten käsitteleminen  Poikkeukseen varaudutaan siten, että poikkeuksen mahdollisesti aiheuttava koodi laitetaan try-catch lohkon sisään.  Jos koodissa tapahtuu poikkeus, try-lohkon suoritus loppuu kesken ja siirrytään catch-lohkoon.  Jos koodissa ei tapahdu poikkeusta, try-lohko suoritetaan loppuun ja catch-lohkoa ei suoriteta ollenkaan.  Lisäksi voidaan laittaa finally-lohko, mikä suoritetaan aina lopuksi. try { // koodia, missä poikkeus voi tapahtua } catch (Exception e) { // mitä tehdään kun poikkeus tapahtuu } finally { // suoritetaan aina } 3

Try-Catch-esimerkki public static void main(String[] args) { Tili tili = new Tili(); double maara; Scanner input = new Scanner(System.in); System.out.print("Anna tilille panon määrä: "); try { maara = input.nextDouble(); tili.pano(maara); System.out.println("Pano onnistui"); } catch (Exception e) { System.out.println("Pano epäonnistui, määrä ei ole luku"); } Tee ohjelma, jolla tilille tehdään pano. jos käyttäjä antaa muuta kuin luvun, koodin suoritus siirtyy catch-lohkoon 4

Poikkeusluokkien hierarkia  Seuraavalla sivuilla on esittely poikkeusluokkien periytymishierarkia.  Hierarkiassa ylimpänä on Trowable-yliluokka, josta periytyy Error- ja Exception-nimiset aliluokat.  Luokkakaaviossa periytymisyhteys kuvataan luokkien välisellä yhteysviivalla, jonka yliluokan päässä on kolmiosymboli. 5

Vakavat peruttamattomat virheet, joihin ohjelmoija ei aina voi vaikuttaa (esim. muistin loppuminen ohjelman suorituksen aikana). Tilanteet, joita ohjelmoija ei välttämättä tiedä etukäteen, mutta ne on huomioitava ohjelmakoodissa. (esim. yritys lukea tiedoston lopun yli, yritys hakea verkosta olematonta resurssia). Ohjelmointivirheet ja ohjelman suoritusaikaiset virheet (esim. viitataan taulukon rajojen ulkopuolelle). Trowable Error Exception IOException RuntimeException Poikkeusluokkia jatkuu… Aliluokkia, jotka kertovat poikkeuksen syyn tarkemmin 6

RuntimeException IndexOutOfBoundsException IllegalArgumentException NullPointerException NumberFormatException ArrayIndexOutOfBounds -Exception ArithmeticException Yritetään käyttää oliota, mitä ei ole Merkkijonoa ei voida muuntaa luvuksi 7 … jatkuu ed. sivulta

Try-esimerkki (monta catch:a) public static void main(String[] args) { Tili tili = null; double maara; Scanner input = new Scanner(System.in); System.out.print("Anna tilille panon määrä: "); try { maara = input.nextDouble(); tili.pano(maara); System.out.println("Pano onnistui"); } catch (NullPointerException e) { System.out.println("Tiliä ei ole"); } catch (Exception e) { System.out.println("Pano epäonnistui, määrä ei ole luku"); } /* Kun catch-osia on monta, laitetaan periytymishierarkiassa alempi poikkeustyyppi ennen ylempää tyyppiä(tässä NullPointerException ennen Exception:a) */ } Tee ohjelma, joka tekee tilille panon Kutsutaan metodia oliolle, jota ei ole 8

Poikkeuksen heittäminen  Try-catch-lohkossa voidaan poikkeus myös heittää (throw) metodien kutsuketjussa ylöspäin. Tällöin toinen metodi käsittelee poikkeuksen.  Poikkeuksen heittävä metodi esitellään tyyliin: näkyvyys tyyppi metodinNimi(parametrit..) throws poikkeustyyppi1,…, poikkeustyyppi_n  Poikkeuksen heittävää metodia on aina kutsuttava try-lohkossa, jotta ollaan valmiita ottamaan kiinni mahdollinen poikkeus. 9

Throw-esimerkki  Esimerkissä metodi pyydaKokonaisluku() heittää tarvittaessa ajoaikaisen poikkeuksen.  Ohjelman main()-metodissa pitää tätä metodia kutsua aina try- catch-lohkossa (kts. seur. sivu). private static int pyydaKokonaisluku() throws NumberFormatEx ception { String syote; int luku; System.out.println("Anna kokonaisluku: "); try { syote = input.nextLine(); luku = Integer.parseInt(syote); // voi heittää poikk. } catch (NumberFormatException e) { throw e; // throw lopettaa myös metodin suorituksen } return luku; } 10

…Throw-esimerkki jatkuu public static Scanner input = new Scanner(System.in); public static void main(String[] args) { int ika; boolean okSyote = false; do { try { ika = pyydaKokonaisluku();//metodi voi heit. poikk. okSyote = true; } catch (NumberFormatException e) { System.out.println("Syötä kokonaisluku numeroina!"); } } while (okSyote != true); //... ohjelma jatkuu System.out.println("Kiitos ohjelman käytöstä"); } 11

printStackTrace()  Exception-luokalla on mm. metodi printStackTrace(). Metodi tulostaa tiedon siitä, minkä metodien kutsuketjun seurauksena poikkeus tapahtui. 12 try { // koodia, missä poikkeus voi tapahtua } catch (Exception e) { e.printStackTrace(); } finally { // suoritetaan aina }