Patikrinta išimtis vs vykdymo laiko išimtis
Išimtys yra ypatingo tipo įvykiai, kurie gali sutrikdyti įprastą programos eigą. Vardo išimtis kilusi iš „išskirtinio įvykio“. Išimties išmetimas yra išimties objekto sukūrimo ir perdavimo perduodant vykdymo sistemai procesas. Kai veikimo laiko sistema gaus išimties objektą, ji bandys surasti ką nors, kas jį tvarkytų skambučių kamino viduje, sukdami jį atvirkštine tvarka (kuria metodai buvo vadinami). Vykdymo sistema yra sėkminga, jei ji randa metodą su išimties tvarkykle. Išimčių tvarkytojas yra kodo blokas, kuris gali oficialiai tvarkyti minėtą išimtį. Jei vykdymo laiko sistema suranda tinkamą tvarkyklę, ji perduos išimties objektą tvarkytojui. Tai vadinama išimties pagavimu. Tačiau jei išimties pašalinti negalima, programa bus nutraukta. „Java“ programoje išimtys paveldimos iš „Throvable“ klasės. Pažymėtos išimtys yra išimtys, kurių tvarkymą vykdo kompiliatorius. Trukmės išimtys yra išimčių rūšis, kurių kompiliatorius netikrina.
Kokia yra patikrinta išimtis?
Pažymėtos išimtys yra klasės java.lang.exception arba jos poklasių objektai (išskyrus java.lang.RuntimeException ir jos poklasius). Pažymėtos išimtys „tikrinamos“ kompiliavimo metu. Tai reiškia, kad programuotojas turi arba sugauti, arba išmesti šias išimtis, kitaip kompiliatorius skundžiasi (sukelia kompiliatoriaus klaidą). Dėl šios priežasties daugelis patikrintų išimčių yra labai gerai žinomos programuotojams. Pvz., „IOException“ ir jos pogrupiai yra tikrinami išimčių atvejais, o programuotojui atliekant prieigą prie failo ar jį modifikuojant, kompiliatorius tikrina, ar programuotojas pasirūpina visomis įmanomomis IOExmissions..
Kokia yra Runtime išimtis?
Trukmės išimtys susideda iš java.lang.RuntimeException ir visų jos pogrupių. Teoriškai kalbant, jie atlieka tą patį tikslą kaip ir patikrintos išimtys ir gali būti išmetami ar tvarkomi kaip patikrintos išimtys, tačiau kompiliatorius jų neįpareigoja. Todėl „Runtime“ išimtys priklauso nepatikrintų išimčių grupei. „NullPointerException“, „NumberFormatEception“, „ClassCastException“ ir „ArrayIndexOutOfBoundsException“ yra įprastos „Java“ vykdomosios išimtys.
Kuo skiriasi tikrinta išimtis nuo „Runtime Exception“??
Nors ir patikrintos išimtys, ir vykdymo laiko išimtys yra nepageidaujamos programos vykdymo metu, jos turi skirtumų. Tikrinamų išimčių tvarkymą vykdo kompiliatorius, tačiau vykdomosios išimtys nėra. Todėl, norint kodą sudaryti, reikia mesti arba tvarkyti patikrintas išimtis, tačiau dėl vykdymo laiko išimčių tokio reikalavimo nėra. Taigi, runtime išimtys kartu su klaidomis priklauso nepatikrintoms 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šmeta naują išimtį, neįpakuodamas originalo, pradinei išimčiai priklausantys krūvos pėdsakai bus prarasti. Čia naudingos vykdymo laiko išimtys. Kadangi visos vykdymo laiko išimtys gali būti tvarkomos vienoje vietoje, todėl programuotojai gali parašyti mažiau kodo. Kita vertus, kadangi reikia sugauti patikrintas išimtis, programuotojui nestebina. Ji visada žinos, kurią patikrintą išimtį tam tikru būdu buvo galima panaudoti. Priešingai, be programuotojo žinios, galima išmesti įvairias vykdymo laiko išimtis.