Poikkeus vs virhe
Odottamatonta käyttäytymistä tapahtuu varmasti ohjelman ollessa käynnissä. Tämä voi johtua poikkeuksista tai virheistä. Poikkeuksia ovat tapahtumat, jotka voivat häiritä normaalia ohjelman kulkua. Virheet ovat olosuhteita, joita voidaan pitää palauttamattomina. Poikkeukset liittyvät enimmäkseen itse sovellukseen, kun taas virheet liittyvät järjestelmään, jossa ohjelma on käynnissä.
Mikä on poikkeus?
Poikkeus on tapahtuma, joka voi häiritä normaalia ohjelman kulkua. Nimi poikkeus tulee ”poikkeuksellisesta tapahtumasta”. Poikkeuksen heittäminen on prosessi, jolla luodaan poikkeusobjekti ja luovutetaan se runtime-järjestelmälle. Poikkeusobjekti luodaan menetelmällä, jolla poikkeus tapahtui. Poikkeusobjekti sisältää hyödyllisiä tietoja, kuten poikkeuksen tyyppi ja kuvaus. Kun ajonaikainen järjestelmä vastaanottaa poikkeusobjektin, se yrittää löytää jonkun käsittelemään sitä puhelupinossa kuljettamalla sitä käänteisessä järjestyksessä (jossa menetelmiä kutsuttiin). Puhelupino on tilattu menetelmälista, jota kutsuttiin ennen menetelmää, jossa poikkeus tapahtui. Suoritusaikajärjestelmä onnistuu, jos se löytää menetelmän poikkeuskäsittelijän kanssa. Poikkeuksen käsittelijä on koodilohko, joka pystyy käsittelemään mainittua poikkeusta virallisesti. Jos ajonaikainen järjestelmä löytää sopivan käsittelijän (ts. Poikkeustyyppi vastaa käsiteltävää tyyppiä), se välittää poikkeusobjektin käsittelijälle. Tätä kutsutaan poikkeuksen kaappaamiseksi. Jos poikkeusta ei kuitenkaan voida käsitellä, ohjelma päättyy. Java-ohjelmassa poikkeukset ovat peräisin 'heitettävästä luokasta'. NullPointerException ja ArrayIndexOutOfBoundsException ovat Javassa kaksi yleistä poikkeusta.
Mikä on virhe?
Virhe on tila, jota voidaan pitää palauttamattomana, kuten ohjelma, joka vaatii käytettävissä olevan muistin määrää suuremman muistin. Näitä virheitä ei voida käsitellä suorituksen aikana. Jos tapahtuu virhe, ohjelma lopetetaan. Java-ohjelmassa virheet perivät Throvable-luokasta. Virheet tarkoittavat yleensä vakavia ongelmia, joita ohjelmoijan (tai sovelluksen) ei pitäisi yrittää kiinni. Virheet ovat yksinkertaisesti epänormaaleja olosuhteita, joita ei koskaan odoteta tapahtuvan normaaleissa olosuhteissa ja joita ei siksi koskaan ennakoida. Esimerkiksi OutOfMemoryError, StackOverflowError ja ThreadDead ovat tällaisia virheitä. Menetelmissä ei tulisi koskaan olla virheiden käsittelijöitä.
Mitä eroa poikkeuksen ja virheen välillä on??
Sekä virheet että poikkeukset ovat ei-toivottuja tapahtumia ohjelman suorittamisen aikana. Heillä on kuitenkin keskeisiä eroja. Ohjelmoija voi ennakoida poikkeuksia, kun virhettä on vaikea ennakoida. Poikkeukset voidaan tarkistaa tai poistaa niiden valinta. Mutta virheitä ei aina ole valittu. Poikkeukset tarkoittavat yleensä ohjelmoijan aiheuttamaa virhettä. Virheitä tapahtuu kuitenkin järjestelmävirheen tai resurssin väärän käytön vuoksi. Siksi poikkeuksia olisi käsiteltävä sovellustasolla, kun taas virheistä tulisi huolehtia järjestelmätasolla (vain jos mahdollista). Poikkeuksen käsittelemisen jälkeen olet varmasti palannut normaaliin ohjelmavirtaan. Mutta vaikka virhe sattuisi, ohjelmoija ei ehkä tiedä miten sitä käsitellä. Toisin kuin perinteinen virheiden käsittely, poikkeukset sallivat virheiden käsittelykoodin erottamisen tavallisesta koodista.