Poikkeustenkäsittely

Samankaltaiset tiedostot
Mitä poikkeuskäsittely tarkoittaa?

14. Poikkeukset 14.1

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

14. Poikkeukset 14.1

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely

Olio-ohjelmointi Virhetilanteiden käsittely

Periytyminen (inheritance)

public static void main (String [] args)

Metodien tekeminen Javalla

Olio-ohjelmointi Javalla

8. Näppäimistöltä lukeminen 8.1

815338A Ohjelmointikielten periaatteet

8. Näppäimistöltä lukeminen 8.1

Taulukoiden käsittely Javalla

List-luokan soveltamista. Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

Listarakenne (ArrayList-luokka)

Mikä yhteyssuhde on?

YHTEYSSUHDE (assosiation)

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

Rajapinta (interface)

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

Java-API, rajapinnat, poikkeukset, UML,...

Ohjelmointityö 3. Mikko Laamanen

Lista luokan sisällä

12. Näppäimistöltä lukeminen 12.1

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

9. Periytyminen Javassa 9.1

9. Periytyminen Javassa 9.1

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Metodien tekeminen Javalla

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

Java-kielen perusteita

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

Toisessa viikkoharjoituksessa on tavoitteena tutustua JUnit:lla testaukseen Eclipse-ympäristössä.

15. Ohjelmoinnin tekniikkaa 15.1

Luokan sisällä on lista

Vahva koostumussuhde (Composition)

Java kahdessa tunnissa. Jyry Suvilehto

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

Ohjelmoinnin jatkokurssi, kurssikoe

KOHDELUOKAN MÄÄRITTELY

Java-kielen perusteita

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

15. Ohjelmoinnin tekniikkaa 15.1

Ohjelmoinnin perusteet Y Python

7. Oliot ja viitteet 7.1

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

1. Omat operaatiot 1.1

Ohjelmointi 2 / 2010 Välikoe / 26.3

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

Poikkeusten ja tapahtumien käsittely

Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 26.2

Tässä tehtävässä käsittelet metodeja, listoja sekä alkulukuja (englanniksi prime ).

Java-kielen perusteet

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

1. Kun käyttäjä antaa nollan, niin ei tulosteta enää tuloa 2. Hyväksy käyttäjältä luku vain joltain tietyltä väliltä (esim tai )

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Standardi- ja tietorakenneluokkia

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

Luokan muodostimet (Constructors)

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

- Komposiittityypit - Object (Mukaanlukien funktiot) - Array. - Erikoisdatatyypit - null - undefined

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

5/20: Algoritmirakenteita III

Projekti 1 Säikeet ja kriittisen vaiheen kontrollointi javalla

Ehto- ja toistolauseet

Olio-ohjelmointi Poikkeusten käsittelystä. 1. Johdanto

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

17. Javan omat luokat 17.1

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

Java-kielen perusteita

Ohjelmoinnin perusteet, kurssikoe

Luokkakirjastot. esiintymämetodien käytöstä:

Tehtävä 1. Tietojen lisääminen, poistaminen, päivittäminen ja tulostaminen

1 Tehtävän kuvaus ja analysointi

Java ja grafiikka. Ville Sundberg

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public)

Sisältö. 22. Taulukot. Yleistä. Yleistä

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

5. HelloWorld-ohjelma 5.1

Ohjelmoinnin perusteet Y Python

ITKP102 Ohjelmointi 1 (6 op)

Yksikkötestaus. Kattava testaus. Moduulitestaus. Ohjelman testaus. yksikkotestaus/ Seija Lahtinen

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet

11. Javan toistorakenteet 11.1

11. Javan valintarakenteet 11.1

Metodit Arvotyyppi. Metodit Arvotyyppi. Metodit Parametrit. Metodit Parametrit. Metodit Kuormittaminen. Metodit Kuormittaminen. Javan perusteet

Ohjelman virheet ja poikkeusten käsittely

Transkriptio:

1 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

2 Poikkeusten käsitteleminen Poikkeukseen varaudutaan siten, että poikkeuksen mahdollisesti aiheuttava koodi laitetaan try-catch lohkon sisään. // koodia, missä poikkeus voi tapahtua catch (Exception e) { // mitä tehdään kun poikkeus tapahtuu finally { // suoritetaan aina 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. 3 Try-Catch-esimerkki public static void main(string[] args) { Tili tili = new Tili(); double maara; Tee ohjelma, jolla tilille tehdään pano. Scanner input = new Scanner(System.in); System.out.print("Anna tilille panon määrä: "); jos käyttäjä antaa muuta kuin luvun, koodin suoritus siirtyy catch-lohkoon 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"); 4

3 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 Poikkeusluokkia Vakavat peruttamattomat virheet, joihin ohjelmoija ei aina voi vaikuttaa (esim. muistin loppuminen ohjelman suorituksen aikana). Trowable Ohjelmointivirheet ja ohjelman suoritusaikaiset virheet (esim. viitataan taulukon rajojen ulkopuolelle). Error Exception IOException Aliluokkia, jotka kertovat poikkeuksen syyn tarkemmin 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). RuntimeException jatkuu 6

4 jatkuu ed. sivulta RuntimeException IndexOutOfBoundsException IllegalArgumentException NullPointerException ArithmeticException NumberFormatException ArrayIndexOutOfBounds -Exception Yritetään käyttää oliota, mitä ei ole Merkkijonoa ei voida muuntaa luvuksi 7 Try-esimerkki (monta catch:a) public static void main(string[] args) { Tili tili = null; double maara; Tee ohjelma, joka tekee tilille panon Scanner input = new Scanner(System.in); System.out.print("Anna tilille panon määrä: "); maara = input.nextdouble(); tili.pano(maara); Kutsutaan metodia oliolle, jota ei ole 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 8 Exception:a) */

5 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. private static int pyydakokonaisluku() throws NumberFormatEx ception { String syote; int luku; System.out.println("Anna kokonaisluku: "); syote = input.nextline(); luku = Integer.parseInt(syote); // voi heittää poikk. catch (NumberFormatException e) { throw e; // throw lopettaa myös metodin suorituksen return luku; Ohjelman main()-metodissa pitää tätä metodia kutsua aina trycatch-lohkossa (kts. seur. sivu). 10

6 Throw-esimerkki jatkuu public static Scanner input = new Scanner(System.in); public static void main(string[] args) { int ika; boolean oksyote = false; do { 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. // koodia, missä poikkeus voi tapahtua catch (Exception e) { e.printstacktrace(); finally { // suoritetaan aina 12