Jukka Juslin Poikkeukset ja niiden paikallistaminen * Jukka Juslin * Liittyy oppikirjan lukuun 11.

Slides:



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

15. Loogiset operaatiot.
Minimaalinen Java-ohjelma •Kaikki ohjelmakoodi on luokkamäärityksen sisällä •Ohjelma käynnistyy ”public static void main(String[] args)”-metodista •System.out.print()
Koostumussuhde Jukka Juslin © Jukka Juslin.
© Jukka Harju, Viittausmuuttujat. © Jukka Harju, Viittaukset •Viittausmuuttuja sisältää tiedon siitä missä muistipaikassa olio.
© Jukka Harju, Jukka Juslin1 Java-ohjelmointi opas ammattimaiseen osaamiseen Luku 6 (osittain) Tiedostot.
Nämä kalvot on lisensoitu Creative Commons Attribution-ShareAlike 1
Tuloksellinen Java-ohjelmointi Luku 9 Taulukot ja perustietorakenteet
Taulukot: Array Taulukko Javassa pitää aina perustaa (new)
Ohjelmointitaito (ict1td002, 12 op) Syksy 2008
13. Pakkaukset.
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.
16. Lohkot Sisällys Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat.
© Jukka Harju, Jukka Juslin Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 9 Poikkeuskäsittely.
Poikkeustenkäsittely  Mitä poikkeustenkäsittely tarkoittaa?  Poikkeuksen käsitteleminen  Poikkeusluokkien hierarkia  Poikkeuksen heittäminen 1.
Toiston tekeminen Javalla  Mikä toistorakenne on?  while toistorakenne  do-while toistorakenne  for toistorakenne 1.
13. Hyvä ohjelmointitapa (osa 1)
© Jukka Harju, Jukka Juslin
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.
String-vertailusta ja Scannerin käytöstä (1/2)
20. Javan omat luokat.
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Standardi- ja tietorakenneluokkia.
Kuinka niitä käsitellään
Tietovirrat ja tiedostot. Anne Benson Tiedon koodaus it-järjestelmissä pienin tietoyksikkö bitti –kaksi tilaa: nolla (sähkövirtaa ei ole) yksi (sähkövirtaa.
1 DataOutputStream ja DataInputStream DataOutputStream:lla voidaan tallentaa perustietotyyppien arvoja binäärimuotoiseen tiedostoon DataInputStream:lla.
HelloWorld-ohjelma. 5.2 Sisällys Lähdekoodi. Lähdekoodin (osittainen) analyysi. Lähdekoodi tekstitiedostoon. Lähdekoodin kääntäminen tavukoodiksi.
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.
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.
ict1td002 - Copyright Raine Kauppinen 1 Tietovirrat  Tietovirran käsite  Tietovirtojen käyttö  Tekstitiedoston luku  Tekstitiedoston kirjoitus.
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely.
2. Lisää Java-ohjelmoinnin alkeita
© Jukka Harju, Jukka Juslin1 Tuloksellinen Java-ohjelmointi HashMap, Properties, Logger, etc Tuloksellinen Java-ohjelmointi.
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.
11. Rajapinnat Sisällys Mitä rajapinnat ovat? Kuinka ne määritellään ja otetaan käyttöön? Moniperiytyminen rajapintojen avulla. Varoituksen.
Java - Tietokanta. JDBC=Java database connectivity  ODBC:n kaltainen ohjelmointiliittymä SQL- tietokantoihin  Koostuu Java-kehitysympäristön (esim.
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.
Anne Benson Tietovirrat ja tiedostot. Anne Benson Tiedon koodaus it-järjestelmissä pienin tietoyksikkö bitti –kaksi tilaa: nolla (sähkövirtaa ei ole)
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
3. Luokat, oliot ja metodit Java-kielessä (Lausekielinen ohjelmointi I ja II –kursseilla opitun kertausta.)
8. Näppäimistöltä lukeminen
Kuinka niitä käsitellään
14. Hyvä ohjelmointitapa.
14. Poikkeukset.
14. Poikkeukset.
eli oliotiedostojen käsittely
Esityksen transkriptio:

Jukka Juslin Poikkeukset ja niiden paikallistaminen * Jukka Juslin * Liittyy oppikirjan lukuun 11

Jukka Juslin Poikkeukset  Java-ohjelman suoritus voi keskeytyä poikkeustilanteeseen (engl. exception)  Poikkeustilanteita on monentyyppisiä – perustyyppi kaikille poikkeuksille on Exception

Jukka Juslin Poikkeusten tarkoitus  Java-ohjelman aiheuttaman poikkeuksen idea on hallitusti käsitellä ongelmatilanne  Jos poikkeus ns. otetaan kiinni ja käsitellään voidaan suoritusta jatkaa normaalisti  Tarkastellaan seuraavaa esimerkkiä

Jukka Juslin Poikkeusesimerkki package viikko12; import java.util.Scanner; public class Hinta { public void aja() { Scanner scan = new Scanner(System.in); System.out.println(”Anna ALV 0 hinta (esim. 12€):”); double hinta = scan.nextDouble(); System.out.println(”Hinta ALV 22%: ” + (1.22*hinta)); } public static void main(String[] args) { Hinta hinta = new Hinta(); hinta.aja(); } minkälainen ongelma tähän voi sisältyä?

Jukka Juslin Edellinen ohjelma ”livenä” Ohjelma kaatuu poikkeukseen rivillä 9 – tämä on itseasiassa hyperlinkki Eclipsessä, josta pääset oikealle riville. Ohjelman kaatuminen johtuu € merkistä, jota numeronlukija ei ymmärrä.

Jukka Juslin Ohjelman korjaaminen – poikkeuksen käsittely  Edellinen ohjelma voidaan korjata lisäämällä poikkeuksenkäsittely  Poikkeuskäsittely tehdään yleensä aina lisäämällä try { } lohko, jossa mahdollisesti tapahtuva poikkeus otetaan kiinni catch -lohkossa  Seuraavalla kalvolla näet aikaisemman ohjelman korjattuna

Jukka Juslin package viikko12; import java.util.Scanner; public class Hinta { public void aja() { Scanner scan = new Scanner(System.in); System.out.println(”Anna ALV 0 hinta (esim. 12€):”); try { double hinta = scan.nextDouble(); System.out.println(”Hinta ALV 22%: ” + (1.22*hinta)); } catch(InputMismatchException ex) { System.out.println(”Syötit virheellisen luvun.”); } public static void main(String[] args) { Hinta hinta = new Hinta(); hinta.aja(); }

Jukka Juslin Lisäongelmia edelliseen esimerkkiin (1 / 2)  Joskus on mahdollista, että ohjelma jää ikisilmukkaan kun scanneriin jäänyt ylimääräinen enter jää lukematta  Olisi syytä aina numeroita luettaessa lukea ylimääräisellä scan.nextLine()-komennolla turha enter pois puskurista

Jukka Juslin Lisäongelmia edelliseen esimerkkiin (2 / 2)  Jotkin toiminnot on usein tehtävä siitä huolimatta onnistuiko syötteen lukeminen vai ei  Näinollen scan.nextLine()-komennon voisi sijoittaa finally-lauseeseen  Lisäksi voi miettiä miten tulee toimia, jos halutaan että ohjelma kysyy oikeaa syötettä niin kauan kunnes se annetaan?

Jukka Juslin Luentoharjoitus  Tee ohjelma PalkkaOhjelma.java, joka kysyy palkkoja. Jos palkka saadaan tekstimuodossa ohjelma kysyy uutta palkkaa niin kauan kunnes palkka saadaan oikeassa muodossaan. Palkat ovat desimaalukuja, eli siis double-tyyppiä.

Jukka Juslin Pakollinen virheentarkistus vs. ei pakollinen  Jossain tilanteissa on pakollista tehdä virheenkäsittely, esimerkiksi avattaessa tiedostoa Java-ohjelmasta käsin Scanner-luokkaa apunakäyttäen  Toisissa tilanteissa taas Scanner ei vaadi virheentarkistusta, kuten on näppäimistöltä luettavan syötteen tapauksessa – tämä on todennäköisesti tehty sen vuoksi että olisi helpompi kirjoittaa koodi, joka lukee näppäimistöltä

Jukka Juslin package viikko12; import java.util.Scanner; public class PakollisestiKasiteltavaPoikkeus { public void aja() { Scanner scan = new Scanner(new File(”lokitiedosto.txt”); scan.println(”testikirjoitus”); scan.close(); } public static void main(String[] args) { PakollisestiKasiteltavaPoikkeus poikkeus = new PakollisestiKasiteltavaPoikkeus(); poikkeus.aja(); }

Jukka Juslin Poikkeuksien eteenpäin heitteleminen 1 / 2  Poikkeuksia voidaan heittää käsiteltäväksi eteenpäin metodista throws-avainsanalla  Esimerkiksi: public void tarkistaDokumenttiluokka(String luokka) throws VaaraDokumenttiLuokka { if (!luokka.equals("V") && !luokka.equals("L") && !luokka.equals("S")) { throw new VaaraDokumenttiLuokka(); }

Jukka Juslin Poikkeuksien eteenpäin heitteleminen 2 / 2  Poikkeus päätyy lopulta komentorivipohjaisessa sovelluksessa main-metodiin, jos sitä ei aikaisemmin käsitellä  Jos poikkeusta ei käsitellä saadaan Eclipseen ns. stack- trace, jossa näkyy metodikutsujen ketju (pino) joissa viimeisenä tasona on kyseisen sovelluksen main-metodi  Stacktraceen voi tulla myös Javan sisäisen toteutuksen luokkia, jotka eivät ole ohjelmoijan itse tekemiä  Stractracen ilmoittamaan kohtaan päästään klikkaamalla kyseistä kohtaa

Jukka Juslin Omien poikkeusluokkien tekeminen  On mahdollista tehdä omia poikkeusluokkia, kun niiden alussa ilmoitetaan extends Exception  Kyseinen vaatii kuitenkin periytymisen käyttämistä ja periytymistä ei tällä kurssilla juuri käsitellä  Kaikkien poikkeuksien kantaluokka on siis Exception, ja kuten ehkä aikaisemmasta huomattiin sillä saadaan pyydystettyä mikä tahansa poikkeustilanne