Patikrinta išimtis ir vykdymo laiko išimtis
Išimtys yra ypatingo tipo įvykiai, kurie gali sutrikdyti įprastą programos eigą. Pavadinimo išimtis kilusi iš „išskirtinio įvykio“. Išimties išmetimas yra išimties objekto kūrimo ir perdavimo vykdymo sistemai procesas. Kai vykdymo laiko sistema gauna išimties objektą, ji bandys surasti ką nors, kas jį apdorotų iškvietimų krūvoje, eidama jį atvirkštine tvarka (tokiu būdu buvo iškviesti metodai). Vykdymo laiko sistema yra sėkminga, jei randa metodą su išimčių tvarkykle. Išimčių tvarkytuvas yra kodo blokas, galintis oficialiai tvarkyti minėtą išimtį. Jei vykdymo sistema randa tinkamą tvarkyklę, ji perduos išimties objektą tvarkyklei. Tai vadinama išimties gaudymu. Tačiau jei išimtis negali būti atlikta, programa bus nutraukta. Java programoje išimtys paveldimos iš Throwable klasės. Pažymėtos išimtys yra išimtys, kurias tvarko kompiliatorius. Vykdymo laiko išimtys yra išimčių tipas, kurių kompiliatorius netikrina.
Kas yra pažymėta išimtis?
Patikrintos išimtys yra klasės java.lang.exception arba jos poklasių objektai (išskyrus java.lang. RuntimeException ir jos poklasius). Patikrintos išimtys „patikrinamos“kompiliavimo metu. Tai reiškia, kad programuotojas turi sugauti arba išmesti šias išimtis, kitaip kompiliatorius nusiskųs (sukeldamas kompiliatoriaus klaidą). Dėl šios priežasties daugelis patikrintų išimčių yra labai gerai žinomos programuotojams. Pavyzdžiui, IOException ir jos poklasiai yra tikrinamos išimtys, o kai programuotojas susiduria su prieiga prie failo ar jį modifikuojant, kompiliatorius patikrina, ar programuotojas pasirūpina visomis galimomis IOExceptions.
Kas yra vykdymo laiko išimtis?
Runtime Exceptions susideda iš java.lang. RuntimeException ir visų jos poklasių. Teoriškai kalbant, jie atlieka tą patį tikslą kaip ir patikrintos išimtys ir gali būti išmesti arba tvarkomi kaip su patikrintomis išimtimis, tačiau kompiliatorius neįgyvendina jų tvarkymo. Todėl vykdymo laiko išimtys priklauso nepažymėtų išimčių šeimai. NullPointerException, NumberFormatEception, ClassCastException ir ArrayIndexOutOfBoundsException yra dažnos vykdymo laiko išimtys Java programoje.
Kuo skiriasi patikrinta išimtis ir vykdymo laiko išimtis?
Nors ir patikrintos išimtys, ir vykdymo laiko išimtys yra nepageidaujami įvykiai vykdant programą, jie turi savo skirtumų. Patikrintų išimčių tvarkymą vykdo kompiliatorius, tačiau vykdymo laiko išimčių ne. Todėl pažymėtos išimtys turi būti išmestos arba tvarkomos, kad kodas būtų kompiliuojamas, tačiau tokio reikalavimo dėl vykdymo laiko išimčių nėra. Todėl vykdymo laiko išimtys kartu su klaidomis priklauso nepažymėtų išimčių kategorijai.
Trūkumas su patikrintomis išimtimis yra tas, kad programuotojas turi tai tvarkyti, net jei ji nežino, kaip tai padaryti. Taigi, jei programuotojas tiesiog išmes naują išimtį, nesuvyniodamas originalo, pradinei išimtiei priklausantis kamino pėdsakas bus prarastas. Čia praverčia vykdymo laiko išimtys. Kadangi visos vykdymo laiko išimtys gali būti tvarkomos vienoje vietoje, programuotojai gali parašyti mažiau kodo. Kita vertus, kadangi patikrintas išimtis reikia pagauti, programuotojui nieko nuostabaus. Ji visada žinos, kuri patikrinta išimtis gali būti išmesta tam tikru metodu. Priešingai, be programuotojo žinios gali būti taikomos įvairios vykdymo laiko išimtys.