Itse olen vielä varsin aloittelija tuon Javan kanssa ja ylipäätään se mitä olio-ohjelmointiin tulee ei ole vielä ihan hallussa, joten tuli tälläinen kysymys mieleen:
Olen havainnut oudon piirteen, että kun Javassa luodaan ilmentymä joistain luokasta, niin joskus jo pelkän ilmentymän tekeminen vaatii sen, että koodin heittää try-catch-lohkon sisälle ja joskus taas ei... Eli lähinnä mietin, että mistä saa tietään milloin tuota try-catchia käytetään ja milloin taas ei? Sikäli ymmärrän sen, että sillä saadaan selville mahdolliset virheet, mutta minkätakia se on joskus välttämätön?
Luokkien ja mm. niiden metodeiden (mukaanlukien konstruktorit) kuvaukset (sekä niiden heittämät poikkeukset) löytyvät APIsta. Myös jotkin IDEt varmasti näyttävät infoa metodeista tooltipeissään. Esimerkkinä vaikkapa java.security.Timestamp.Timestamp(Date timestamp, CertPath signedCertPath), jonka voidaan nähdä heittävän NullPointerExceptionin
jos jokin annetuista parametreistä oli null
.
Triton kirjoitti:
Sikäli ymmärrän sen, että sillä saadaan selville mahdolliset virheet, mutta minkätakia se on joskus välttämätön?
Jos kyseessä on tarkistettu poikkeus, se on joko heitettävä tai siepattava. Yleensä siepattava, koska jos sellainen poikkeus tulee, se mitä olet yrittänyt ei ole onnistunut, ja asialle on tehtävä jotain.
Jos metodi voi heittää poikkeuksen (Exception), joka ei ole periytetty RuntimeException- tai Error-luokasta, niin tämä mahdollinen poikkeustilanne pitää käsitellä joko try-catchilla tai ilmoittamalla metodin määrittelyssä throws-avainsanalla, että tästä metodista voi lentää ulos annetun tyyppinen poikkeus (esim. public int foo(File bar) throws FileNotFoundException {...}).
Tähän samaan "soppaan" vielä:
- Jos olion constructori heittää exception -> olion luonti epäonnistuu
- Jos näin käy, silti voi saada viitteen olioon
== huono homma
Aihe on jo aika vanha, joten et voi enää vastata siihen.