Risto Saarelman mallivastaus ja arvosteluperusteet Helsingin yliopiston Ohjelmointitekniikka (Java) -kurssin 2006-02-28 kurssikokeen tehtävään 1. Eri kohtien pisteytykset ovat suuntaa-antavia, varsinaisessa pisteytyksessä on pyritty huomioimaan vastaus kokonaisuutena. Koska kokeessa sai käyttää kirjallista materiaalia, asiavirheistä menettää pisteitä helposti. Luokkahierarkian yläluokka on Throwable. Siitä periytyvät suoraan luokat Error ja Exception. Exceptionista periytyy RuntimeException. (2p) Throwable-luokkaa itseään käytetään yleensä vain kattoluokkana kaikille poikkeuksille, sitä ei instantioida eikä siitä johdeta omia poikkeuksia. Error-luokasta periytyvät poikkeusluokat kuvaavat vakavia virheitä, joista ohjelman ei yleensä voida odottaa pystyvän toipumaan. Tällaisia ovat esimerkiksi virtuaalikoneen toimintahäiriö, muistin loppuminen tai assertiovirhe. Exception-luokkaan kuuluvat yleensä ohjelman ulkopuolisista syistä johtuvat poikkeukset, joista ohjelman pitäisi voida toipua. Käytännössä siis "normaalit" poikkeukset. Hyvin moni Java-kirjaston poikkeus periytyy Exceptionista, ja yleensä omat poikkeusluokat perivät sen. RuntimeException on luokka poikkeuksille, joita ei tarvitse julistaa throws-lausekkeella. Nämä ilmenevät kun ohjelmoija on tehnyt virheen, eivätkä johdu ohjelman ulkopuolisista olosuhteista. Esimerkkejä ovat nollalla jakaminen, taulukon rajojen yli kirjoittaminen ja olioviitteen virheellinen tyyppicastays. (1p jokaisesta luokasta josta on osannut sanoa jotain järkevää.) Tarkistetut poikkeukset ovat siis poikkeuksia, jotka täytyy joko käsitellä metodissa try-catch -lohkolla tai julistaa metodi "throws [PoikkeusTyyppi]" -lausekkeella tarkistetun poikkeuksen heittäväksi metodiksi. Tarkistamattomia poikkeuksia voi heittää ulos metodista vaikka metodia ei olisikaan julistettu näitä poikkeuksia heittäväksi. Tarkistamattomia poikkeuksia ovat luokkien Error, RuntimeException ja kaikkien niistä periytyvien luokkien poikkeukset. Tarkistettuja poikkeuksia ovat kaikki muut poikkeukset. (2p) Yleisiä virheitä: Error laskettu tarkistetuksi poikkeukseksi. Tästä on yleensä menettänyt pisteen, asiavirheitä ei pitäisi kirjan kanssa tenttiessä vastaukseen tulla. Errorithan voivat lentää aivan missä kohden ohjelmaa hyvänsä, joten ei olisi kovinkaan toimivaa jos ne pitäisi julistaa. Sanottu että erityisesti RuntimeExceptionit tapahtuvat vasta ohjelman ajon aikana. Kaikki poikkeukset tapahtuvat ohjelman ajon aikana. Käännösaikaina tarkistetaan vain että ohjelmassa on koodi kaikkien tarkistettujen poikkeuksien käsittelylle. Jos muu vastaus näytti olevan aivan kunnossa, tästä ei yleensä vähennetty pisteitä.