Poikkeuksen ja virheen välinen ero

Poikkeuksen ja virheen välinen ero
Poikkeuksen ja virheen välinen ero

Video: Poikkeuksen ja virheen välinen ero

Video: Poikkeuksen ja virheen välinen ero
Video: NAT Explained - Network Address Translation 2024, Kesäkuu
Anonim

Poikkeus vs virhe

Odottamatonta toimintaa tapahtuu väistämättä, kun ohjelma on käynnissä. Tämä voi johtua poikkeuksista tai virheistä. Poikkeuksia ovat tapahtumat, jotka voivat häiritä normaalia ohjelmankulkua. Virheet ovat olosuhteita, joita voidaan pitää peruuttamattomina. 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 ohjelmankulkua. Nimipoikkeus tulee "poikkeuksellisesta tapahtumasta". Poikkeuksen heittäminen on prosessi, jossa luodaan poikkeusobjekti ja luovutetaan se ajonaikaiselle järjestelmälle. Poikkeusobjekti luodaan menetelmällä, jossa poikkeus tapahtui. Poikkeusobjekti sisältää hyödyllistä tietoa, kuten poikkeuksen tyypin ja kuvauksen. 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). Kutsupino on järjestetty luettelo menetelmistä, jotka kutsuttiin ennen menetelmää, jossa poikkeus tapahtui. 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 (eli poikkeuksen tyyppi vastaa käsiteltävää tyyppiä), 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". NullPointerException ja ArrayIndexOutOfBoundsException ovat kaksi yleistä poikkeusta Javassa.

Mikä on virhe?

Virhe on tila, jota voidaan pitää peruuttamattomana, kuten ohjelma, joka vaatii käytettävissä olevaa enemmän muistia. Näitä virheitä ei voida käsitellä suorituksen aikana. Jos tapahtuu virhe, ohjelma keskeytyy. Javassa virheet periytyvät Throwable-luokasta. Virheet tarkoittavat yleensä vakavia ongelmia, joita ohjelmoijan (tai sovelluksen) ei pitäisi yrittää saada kiinni. Virheet ovat yksinkertaisesti epänormaaleja olosuhteita, joita ei koskaan odoteta tapahtuvan normaaleissa olosuhteissa, eikä niitä siksi koskaan ennakoida. Tällaisia virheitä ovat esimerkiksi OutOfMemoryError, StackOverflowError ja ThreadDead. Menetelmillä ei saa koskaan olla käsittelijöitä virheille.

Mitä eroa on poikkeuksella ja virheellä?

Sekä virheet että poikkeukset ovat ei-toivottuja tapahtumia ohjelman suorituksen aikana. Niissä on kuitenkin keskeisiä eroja. Ohjelmoija voi ennakoida poikkeuksia, kun taas virhettä on vaikea ennakoida. Poikkeukset voidaan valita tai poistaa. Mutta virheet ovat aina tarkistamattomia. Poikkeukset tarkoittavat yleensä ohjelmoijan aiheuttamaa virhettä. Virheet kuitenkin johtuvat järjestelmävirheestä tai resurssin sopimattomasta käytöstä. Siksi poikkeukset tulee käsitellä sovellustasolla, kun taas virheet tulee hoitaa järjestelmätasolla (vain jos mahdollista). Poikkeuksen käsittelyn jälkeen palaat taatusti normaaliin ohjelmakulkuun. Mutta vaikka virhe havaittaisiin, ohjelmoija ei välttämättä tiedä, kuinka käsitellä sitä. Toisin kuin perinteisessä virheenkäsittelyssä, poikkeukset mahdollistavat virheenkäsittelykoodin erottamisen tavallisesta koodista.

Suositeltava: