Izjema v primerjavi z napako
Med izvajanjem programa se bo verjetno zgodilo nepričakovano vedenje. Do tega lahko pride zaradi izjem ali napak. Izjema so dogodki, ki lahko motijo normalen pretok programa. Napake so pogoji, ki jih je mogoče šteti za neizterljive. Izjeme so večinoma povezane s samo aplikacijo, napake pa so povezane s sistemom, na katerem se program izvaja.
Kaj je izjema?
Izjema je dogodek, ki lahko moti normalen pretok programa. Ime izjema izvira iz "izjemnega dogodka". Odstranjevanje izjeme je postopek ustvarjanja predmeta izjeme in njegove predaje izvajalnemu sistemu. Predmet izjeme ustvari metoda, v kateri je prišlo do izjeme. Predmet izjeme vsebuje koristne informacije, kot sta vrsta in opis izjeme. Ko sistem izvajanja prejme objekt izjeme, bo poskusil najti nekoga, ki bi ga upravljal v skladbi klicev, tako da ga bo preusmeril v obratnem vrstnem redu (v katerem so bile klicane metode). Količni klic je urejen seznam metod, ki so bile poklicane pred načinom, v katerem je prišlo do izjeme. Izvajalni sistem je uspešen, če najde metodo z obdelovalcem izjem. Obdelovalec izjem je blok kode, ki lahko uradno obravnava omenjeno izjemo. Če sistem izvajanja najde ustrezen obdelovalec (tj. Vrsta izjeme se ujema s tipom, ki ga je mogoče obdelati), bo predmet izjeme posredoval obdelovalcu. Temu rečemo lovljenje izjeme. Če izjeme ni mogoče obravnavati, se program ustavi. V Javi izjeme podedujejo iz 'razreda Throwable'. NullPointerException in ArrayIndexOutOfBoundsException sta dve pogosti izjemi na Javi.
Kaj je napaka?
Napaka je pogoj, ki se lahko šteje za nepopravljiv, na primer program, ki zahteva veliko več pomnilnika, kot je na voljo. Teh napak ni mogoče obravnavati med izvajanjem. Če pride do napake, se program ustavi. V Javi napake podedujejo iz razreda Throwable. Napake ponavadi pomenijo resne težave, ki jih programer (ali aplikacija) ne bi smel poskušati ujeti. Napake so preprosto nenormalni pogoji, za katere se v normalnih okoliščinah ne pričakuje, da se bodo nikoli zgodili, zato nikoli niso predvideni. Na primer, OutOfMemoryError, StackOverflowError in ThreadDead so takšne napake. Metode nikoli ne bi smele imeti upravljavcev napak.
Kakšna je razlika med izjemo in napako?
Tako napake kot izjeme so neželeni pojav med izvajanjem programa. Vendar pa imajo ključne razlike. Programer lahko predvideva izjeme, medtem ko je napako težko predvideti. Izjeme je mogoče preveriti ali preveriti. Toda napake so vedno nenadzorovane. Izjeme običajno označujejo napako, ki jo povzroči programer. Vendar pa do napak pride zaradi sistemske napake ali neprimerne uporabe vira. Zato je treba na ravni aplikacije obravnavati izjeme, napake pa na sistemski ravni (samo če je mogoče). Po obdelavi izjeme se vam zagotovo povrne običajni programski tok. Toda tudi če je napaka zaznana, programer v prvi vrsti morda ne ve, kako to rešiti. Za razliko od klasičnega ravnanja z napakami izjeme omogočajo ločitev kode za ravnanje z napakami od običajne kode.