Përjashtim vs Gabim
Sjellje e papritur do të ndodhë kur një program po ekzekutohet. Kjo mund të jetë për shkak të përjashtimeve ose gabimeve. Përjashtim bëjnë ngjarjet, të cilat mund të prishin rrjedhën normale të programit. Gabimet janë kushte që mund të konsiderohen të pariparueshme. Përjashtimet kanë të bëjnë kryesisht me vetë aplikacionin, ndërsa gabimet lidhen me sistemin në të cilin programi po funksionon.
Çfarë është një përjashtim?
Përjashtim është një ngjarje që mund të prishë rrjedhën normale të programit. Përjashtimi i emrit vjen nga "ngjarja e jashtëzakonshme". Hedhja e një përjashtimi është procesi i krijimit të një objekti përjashtimi dhe dorëzimit të tij në sistemin e ekzekutimit. Objekti i përjashtimit krijohet me metodën në të cilën ndodhi përjashtimi. Objekti i përjashtimit përmban informacione të dobishme si lloji dhe përshkrimi i përjashtimit. Kur sistemi i ekzekutimit merr objektin e përjashtimit, ai do të përpiqet të gjejë dikë që ta trajtojë atë brenda grupit të thirrjeve duke e përshkuar atë në rendin e kundërt (në të cilin u thirrën metodat). Call stack është lista e renditur e metodave, të cilat janë thirrur para metodës në të cilën ka ndodhur përjashtimi. Sistemi i ekzekutimit është i suksesshëm nëse gjen një metodë me një mbajtës përjashtimi. Trajtuesi i përjashtimit është një bllok kodi që mund të trajtojë zyrtarisht përjashtimin e përmendur. Nëse sistemi i kohës së ekzekutimit gjen një mbajtës të përshtatshëm (d.m.th. lloji i përjashtimit përputhet me llojin që mund të trajtohet), ai do t'ia kalojë objektin e përjashtimit mbajtësit. Kjo quhet kapja e përjashtimit. Megjithatë, nëse përjashtimi nuk mund të trajtohet, programi do të përfundojë. Në Java, përjashtimet trashëgojnë nga 'klasa e hidhur.' NullPointerException dhe ArrayIndexOutOfBoundsException janë dy përjashtime të zakonshme në Java.
Çfarë është një gabim?
Një gabim është një kusht që mund të konsiderohet i parikuperueshëm, si p.sh. programi që kërkon një sasi memorie më të madhe se ajo që disponohet. Këto gabime nuk mund të trajtohen në kohën e ekzekutimit. Nëse ndodh një gabim, programi do të përfundojë. Në Java, gabimet trashëgohen nga klasa Throwable. Gabimet zakonisht tregojnë probleme serioze që programuesi (ose aplikacioni) nuk duhet të përpiqet t'i kapë. Gabimet janë thjesht kushte jonormale, të cilat nuk pritet të ndodhin kurrë në rrethana normale, dhe për këtë arsye nuk parashikohen kurrë. Për shembull, OutOfMemoryError, StackOverflowError dhe ThreadDead janë gabime të tilla. Metodat nuk duhet të kenë kurrë mbajtës për gabimet.
Cili është ndryshimi midis përjashtimit dhe gabimit?
Të dy gabimet dhe përjashtimet janë dukuri e padëshiruar gjatë ekzekutimit të një programi. Megjithatë, ato kanë dallime kryesore. Përjashtimet mund të parashikohen nga programuesi, ndërsa një gabim është i vështirë për t'u parashikuar. Përjashtimet mund të kontrollohen ose të hiqen. Por gabimet janë gjithmonë të pakontrolluara. Përjashtimet zakonisht tregojnë një gabim të shkaktuar nga programuesi. Megjithatë, gabimet ndodhin për shkak të një gabimi të sistemit ose një përdorimi të papërshtatshëm të një burimi. Prandaj, përjashtimet duhet të trajtohen në nivelin e aplikacionit, ndërsa gabimet duhet të merren parasysh në nivelin e sistemit (vetëm nëse është e mundur). Pas trajtimit të një përjashtimi, ju garantohet të ktheheni në rrjedhën normale të programit. Por edhe nëse zbulohet një gabim, programuesi mund të mos dijë si ta trajtojë atë në radhë të parë. Ndryshe nga trajtimi tradicional i gabimeve, përjashtimet lejojnë ndarjen e kodit të trajtimit të gabimeve nga kodi i rregullt.