Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

© Jukka Harju, Jukka Juslin Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 9 Poikkeuskäsittely.

Samankaltaiset esitykset


Esitys aiheesta: "© Jukka Harju, Jukka Juslin Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 9 Poikkeuskäsittely."— Esityksen transkriptio:

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.


Lataa ppt "© Jukka Harju, Jukka Juslin Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 9 Poikkeuskäsittely."

Samankaltaiset esitykset


Iklan oleh Google