Lataa esitys
Esittely latautuu. Ole hyvä ja odota
JulkaistuAnnemari Mattila Muutettu yli 8 vuotta sitten
1
© Jukka Harju, Jukka Juslin Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 9 Poikkeuskäsittely
2
© Jukka Harju, Jukka Juslin Nämä kalvot on lisensoitu Creative Commons Attribution-ShareAlike 1.0 -lisenssillä. Lisäys edelliseen lisenssiin: Kalvojen muokkaaminen on sallittu vain opettajille, joiden kursseilla käytetään kurssikirjana Tuloksellinen Java-ohjelmointi – tai Java ohjelmointi opas ammattimaiseen osaamiseen -kirjaa.Creative Commons Attribution-ShareAlike 1.0 -lisenssillä
3
© Jukka Harju, Jukka Juslin Missä ollaan? Johdanto Try-catch-finally –rakenne Poikkeusolion sisältämät tiedot Milloin pyydystetään? Poikkeusten heittäminen
4
© Jukka Harju, Jukka Juslin Johdanto Javassa ajonaikainen ohjelman normaalia suorittamista häiritsevä tapahtuma synnyttää poikkeuksen ( Exception ). Poikkeuksia ovat esimerkiksi taulukon rajan ali- / yliviittaaminen ( IndexOutOfBoundsException ) tai ei-numeerisen tiedon numeroksi muuntamisyritys ( NumberFormatException ).
5
© Jukka Harju, Jukka Juslin Try–catch–finally -rakenne Poikkeukset käsitellään Javassa try–catch– finally rakenteella. Try -osaan sijoitetaan lauseet, jotka voivat aiheuttaa poikkeuksen syntymisen. Catch -osassa käsitellään tietyn tyyppisen poikkeukset. Lopuksi suoritetaan molemmille osille yhteinen finally -osa. Seuraavassa esimerkki try-catch –lohkosta, katso myös kirjan esimerkki 7.1.
6
© Jukka Harju, Jukka Juslin Try–catch–finally -rakenne public class PoikkeuskasittelyEsimerkki { public void laske() { int osoittaja = 10, nimittaja = 0; int osamaara; try { osamaara = osoittaja / nimittaja; } catch (Exception ex) { System.out.println("Nollalla jakaminen ei ole sallittua!"); } } public static void main(String[] args) { PoikkeuskasittelyEsimerkki laskuri = new PoikkeuskasittelyEsimerkki(); laskuri.laske(); } } Poikkeuksen mahdollisesti synnyttävät lauseet sijoitetaan try -lohkoon. Poikkeuksen käsittelevät lauseet sijoitetaan catch - lohkoon.
7
© Jukka Harju, Jukka Juslin Try–catch–finally -rakenne catch -lohkoja voidaan toteuttaa useita peräkkäin. Tällöin eri catch -lohkoissa pyydystetään eri tyyppisiä poikkeuksia (eri Exception -luokkien olioita) edeten erityisestä yleisempään poikkeukseen. Seuraavassa esimerkki useamman kuin yhden catch -lohkon toteuttamisesta.
8
© Jukka Harju, Jukka Juslin Try–catch–finally -rakenne public class PoikkeuskasittelyEsimerkki { public void laske() { int osoittaja = 10, nimittaja = 0; int osamaara; try { osamaara = osoittaja / nimittaja; } catch (ArithmeticException ex) { System.out.println("Nollalla jakaminen ei ole sallittua!"); } catch (Exception ex) { System.out.println("Tapahtui tunnistamaton poikkeus!"); } } public static void main(String[] args) { PoikkeuskasittelyEsimerkki laskuri = new PoikkeuskasittelyEsimerkki(); laskuri.laske(); } } Kaksi catch -lohkoa, jotka pyydystävät eri poikkeuksia.
9
© Jukka Harju, Jukka Juslin Try–catch–finally -rakenne finally -lohkon toteutetaan catch - lohkojen jälkeen. finally -lohko suoritetaan aina lopuksi riippumatta siitä suoritettiinko catch - lohkoja tai ei. Seuraavassa esimerkki finally -lohkon toteuttamisesta.
10
© Jukka Harju, Jukka Juslin Try–catch–finally -rakenne public class PoikkeuskasittelyEsimerkki { public void laske() { int osoittaja = 10, nimittaja = 0; int osamaara = 0; try { osamaara = osoittaja / nimittaja; } catch (ArithmeticException ex) { System.out.println("Nollalla jakaminen ei ole sallittua!"); } catch (Exception ex) { System.out.println("Tapahtui tunnistamaton poikkeus!"); } finally { System.out.println("Laskenta suoritettu."); System.out.println("Tulos = " + osamaara); } } public static void main(String[] args) { PoikkeuskasittelyEsimerkki laskuri = new PoikkeuskasittelyEsimerkki(); laskuri.laske(); } } finally -lohko toteutetaan try - ja catch -lohkojen jälkeen.
11
© Jukka Harju, Jukka Juslin Try–catch–finally -rakenne try -lohkon suoritus keskeytyy poikkeuksen suorittavan lauseen kohdalla ja kontrolli siirtyy sopivaan catch -lohkoon. Seuraavassa esimerkki tällaisesta tilanteesta.
12
© Jukka Harju, Jukka Juslin Try–catch–finally -rakenne public class PoikkeuskasittelyEsimerkki { public void laske() { int osoittaja = 10, nimittaja = 0; int osamaara; try { osamaara = osoittaja / nimittaja; System.out.println("Tämä ei koskaan tulostu!"); } catch (Exception ex) { System.out.println("Nollalla jakaminen ei ole sallittua!"); } } public static void main(String[] args) { PoikkeuskasittelyEsimerkki laskuri = new PoikkeuskasittelyEsimerkki(); laskuri.laske(); } } Tätä lausetta ei suoriteta.
13
© Jukka Harju, Jukka Juslin Missä ollaan? Johdanto Try-catch-finally –rakenne Poikkeusolion sisältämät tiedot Milloin pyydystetään? Poikkeusten heittäminen
14
© Jukka Harju, Jukka Juslin Poikkeusolion sisältämät tiedot Poikkeusoliolta voidaan pyytää tarkempia tietoja poikkeuksen syystä metodeilla getMessage ja printStackTrace. getMessage palauttaa String -tyyppisen viestin poikkeuksen syystä printStackTrace tulostaa metodien kutsuketjun poikkeusriviin saakka. Seuraavassa esimerkki näiden käytöstä.
15
© Jukka Harju, Jukka Juslin Poikkeusolion sisältämät tiedot public class PoikkeuskasittelyEsimerkki { public void laske() { int osoittaja = 10, nimittaja = 0; int osamaara; try { osamaara = osoittaja / nimittaja; } catch (Exception ex) { System.out.println("Poikkeusoliolta saatu viesti:"); System.out.println(ex.getMessage()); System.out.println("Metodien kutsuketju:"); ex.printStackTrace(); } } public static void main(String[] args) { PoikkeuskasittelyEsimerkki laskuri = new PoikkeuskasittelyEsimerkki(); laskuri.laske(); } } Metodien kutsuketjun tulostaminen. Poikkeusoliolta saatavan viestin tulostaminen.
16
© Jukka Harju, Jukka Juslin Poikkeusolion sisältämät tiedot Edellinen ohjelma tulostaa seuraavaa: Poikkeusoliolta saatu viesti: / by zero Metodien kutsuketju: java.lang.ArithmeticException: / by zero at PoikkeuskasittelyEsimerkki5.laske(PoikkeuskasittelyEsimerkki5.java:7) at PoikkeuskasittelyEsimerkki5.main(PoikkeuskasittelyEsimerkki5.java:18)
17
© Jukka Harju, Jukka Juslin Missä ollaan? Johdanto Try-catch-finally –rakenne Poikkeusolion sisältämät tiedot Milloin pyydystetään? Poikkeusten heittäminen
18
© Jukka Harju, Jukka Juslin Milloin pyydystetään? Javassa poikkeukset jaetaan kahteen pääluokkaan: –Tarkistettavat (checked) –Tarkistamattomat (unchecked) Kääntäjä antaa virheilmoitukset tarkistettavista poikkeuksista, joille ei ole toteutettu poikkeuskäsittelyä. Metodin mahdollisesti heittämät poikkeukset voidaan aina tarkistaa Java-APIsta ja lisätä tarvittava poikkeuskäsittely.
19
© Jukka Harju, Jukka Juslin Missä ollaan? Johdanto Try-catch-finally –rakenne Poikkeusolion sisältämät tiedot Milloin pyydystetään? Poikkeusten heittäminen
20
© Jukka Harju, Jukka Juslin Poikkeusten heittäminen Poikkeus voidaan siirtää käsiteltäväksi kutsuneelle metodille ”heittämällä” se. Poikkeuksen heittämisessä käytetään throws - avainsanaa. Kutsuneen metodin on sisällettävä heitetyn poikkeuksen käsittely. Seuraavassa esimerkki poikkeuksen heittämisestä, katso myös kirjan esimerkki 7.2.
21
© Jukka Harju, Jukka Juslin Poikkeusten heittäminen public class PoikkeuskasittelyEsimerkki { public void laske() throws ArithmeticException { int osoittaja = 10, nimittaja = 0; int osamaara; osamaara = osoittaja / nimittaja; } public static void main(String[] args) { PoikkeuskasittelyEsimerkki laskuri = new PoikkeuskasittelyEsimerkki(); try { laskuri.laske(); } catch (ArithmeticException ex) { System.out.println("Nollalla jakaminen ei ole sallittua!"); } } } Heitetyn poikkeuksen käsittely. Metodin määrittelyssä on kerrottava metodin heittävän poikkeuksia.
Samankaltaiset esitykset
© 2023 SlidePlayer.fi Inc.
All rights reserved.