Tarkastetun poikkeuksen ja ajonaikaisen poikkeuksen välinen ero

Tarkastetun poikkeuksen ja ajonaikaisen poikkeuksen välinen ero
Tarkastetun poikkeuksen ja ajonaikaisen poikkeuksen välinen ero

Video: Tarkastetun poikkeuksen ja ajonaikaisen poikkeuksen välinen ero

Video: Tarkastetun poikkeuksen ja ajonaikaisen poikkeuksen välinen ero
Video: Kaupunkijarrutusjärjestelmä - vakiona lähes kaikissa uusissa Mazdoissa 2024, Joulukuu
Anonim

Tarkastettu poikkeus vs. suoritusaikapoikkeus

Poikkeukset ovat erikoistapahtumia, jotka voivat häiritä normaalia ohjelmankulkua. Nimipoikkeus tulee "poikkeuksellisesta tapahtumasta". Poikkeuksen heittäminen on prosessi, jossa luodaan poikkeusobjekti ja luovutetaan se ajonaikaiselle järjestelmälle. Kun ajonaikainen järjestelmä vastaanottaa poikkeusobjektin, se yrittää löytää jonkun käsittelemään sitä puhelupinon sisällä kulkemalla sen läpi käänteisessä järjestyksessä (missä menetelmät kutsuttiin). Ajonaikainen järjestelmä onnistuu, jos se löytää menetelmän, jossa on poikkeuskäsittelijä. Poikkeuskäsittelijä on koodilohko, joka voi virallisesti käsitellä mainitun poikkeuksen. Jos ajonaikainen järjestelmä löytää sopivan käsittelijän, se välittää poikkeusobjektin käsittelijälle. Tätä kutsutaan poikkeuksen tavoittamiseksi. Jos poikkeusta ei kuitenkaan voida käsitellä, ohjelma päättyy. Javassa poikkeukset periytyvät Throwable-luokasta. Tarkistetut poikkeukset ovat poikkeuksia, joiden käsittelyn kääntäjä pakottaa. Ajonaikaiset poikkeukset ovat eräänlaisia poikkeuksia, joita kääntäjä ei tarkista.

Mikä on tarkistettu poikkeus?

Tarkistetut poikkeukset ovat joko luokan java.lang.exception tai sen alaluokkien objekteja (paitsi java.lang. RuntimeException ja sen alaluokat). Tarkistetut poikkeukset "tarkistetaan" käännöshetkellä. Tämä tarkoittaa, että ohjelmoijan täytyy joko ottaa kiinni tai heittää nämä poikkeukset, tai muuten käännös valittaa (aiheuttaa kääntäjävirheen). Tästä syystä monet tarkistetut poikkeukset ovat ohjelmoijien hyvin tuttuja. Esimerkiksi IOException ja sen alaluokat ovat tarkistettuja poikkeuksia, ja aina kun ohjelmoija käsittelee tiedoston käyttöä tai muokkaamista, kääntäjä tarkistaa varmistaakseen, että ohjelmoija huolehtii kaikista mahdollisista IOExceptioneista.

Mikä on ajonaikainen poikkeus?

Ajonaikaiset poikkeukset koostuvat java.lang. RuntimeExceptionista ja kaikista sen alaluokista. Teoreettisesti ne palvelevat samaa tarkoitusta kuin tarkistetut poikkeukset, ja niitä voidaan heittää tai käsitellä kuin tarkistettua poikkeusta, mutta kääntäjä ei pakota niiden käsittelyä. Siksi ajonaikaiset poikkeukset kuuluvat tarkistamattomien poikkeusten perheeseen. NullPointerException, NumberFormatEception, ClassCastException ja ArrayIndexOutOfBoundsException ovat yleisiä ajonaikaisia poikkeuksia Javassa.

Mitä eroa on tarkistetun poikkeuksen ja ajonaikaisen poikkeuksen välillä?

Vaikka sekä tarkistetut poikkeukset että ajonaikaiset poikkeukset ovat ei-toivottuja tapahtumia ohjelman suorituksen aikana, niillä on erojaan. Kääntäjä pakottaa tarkistetun poikkeuksen käsittelyn, mutta ajonaikaiset poikkeukset eivät. Siksi tarkistetut poikkeukset täytyy heittää tai käsitellä, jotta koodi voidaan kääntää, mutta ajonaikaisten poikkeusten os alta tällaista vaatimusta ei ole. Näin ollen ajonaikaiset poikkeukset kuuluvat virheiden ohella valitsemattomien poikkeusten luokkaan.

Haittapuolena tarkistetuin poikkeuksin on se, että ohjelmoijan täytyy käsitellä se, vaikka hän ei tietäisi miten. Joten jos ohjelmoija vain heittää uuden poikkeuksen käärimättä alkuperäistä, alkuperäiseen poikkeukseen kuuluva pinojälki menetetään. Tässä ajonaikaiset poikkeukset ovat hyödyllisiä. Koska kaikki ajonaikaiset poikkeukset voidaan käsitellä yhdessä paikassa, ohjelmoijat voivat kirjoittaa vähemmän koodia. Toisa alta, koska tarkistetut poikkeukset on saatava kiinni, ei ole yllätys ohjelmoijalle. Hän tietää aina, mikä tarkistettu poikkeus voidaan heittää tietyllä menetelmällä. Päinvastoin, erilaisia ajonaikaisia poikkeuksia voidaan heittää ohjelmoijan tietämättä.

Suositeltava: