Išimtis vs klaida
Paleidžiant programą, gali atsirasti netikėtų veiksmų. Taip gali nutikti dėl išimčių ar klaidų. Išimtys yra įvykiai, galintys sutrikdyti įprastą programos eigą. Klaidos yra sąlygos, kurios gali būti laikomos nepataisomomis. Išimtys dažniausiai yra susijusios su pačia programa, o klaidos yra susijusios su sistema, kurioje programa veikia.
Kas yra išimtis?
Išimtis yra įvykis, galintis 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. Išimties objektas sukuriamas metodu, kuriame įvyko išimtis. Išimties objekte yra naudingos informacijos, tokios kaip išimties tipas ir aprašymas. 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). Iškvietimo krūva yra sutvarkytas metodų, kurie buvo iškviesti prieš metodą, kuriame įvyko išimtis, sąrašas. 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 laiko sistema randa tinkamą tvarkyklę (ty išimties tipas atitinka tipą, kurį galima apdoroti), ji perduos išimties objektą tvarkyklei. Tai vadinama išimties gaudymu. Tačiau jei išimtis negali būti atlikta, programa bus nutraukta. „Java“versijoje išimtys paveldimos iš „Throwable class“. NullPointerException ir ArrayIndexOutOfBoundsException yra dvi dažniausios „Java“išimtys.
Kas yra klaida?
Klaida yra būklė, kuri gali būti laikoma nepataisoma, pvz., programai, kuriai reikalingas didesnis atminties kiekis nei turima. Šios klaidos negali būti ištaisytos vykdymo metu. Jei įvyks klaida, programa bus nutraukta. Java klaidos paveldimos iš Throwable klasės. Klaidos dažniausiai reiškia rimtas problemas, kurių programuotojas (arba programa) neturėtų bandyti sugauti. Klaidos yra tiesiog nenormalios sąlygos, kurių niekada nesitikima įprastomis aplinkybėmis, taigi ir nenumatytos. Pavyzdžiui, OutOfMemoryError, StackOverflowError ir ThreadDead yra tokios klaidos. Metodai niekada neturėtų turėti klaidų tvarkyklių.
Kuo skiriasi išimtis ir klaida?
Ir klaidos, ir išimtys yra nepageidaujami įvykiai vykdant programą. Tačiau jie turi esminių skirtumų. Programuotojas gali numatyti išimtis, o klaidą sunku numatyti. Išimtys gali būti pažymėtos arba nepažymėtos. Tačiau klaidos visada nepatikrintos. Išimtys paprastai rodo programuotojo sukeltą klaidą. Tačiau klaidų atsiranda dėl sistemos klaidos arba netinkamo išteklių naudojimo. Todėl išimtys turėtų būti tvarkomos programos lygiu, o klaidos – sistemos lygiu (tik jei įmanoma). Sutvarkę išimtį garantuojate, kad grįšite į įprastą programos eigą. Tačiau net jei klaida bus užfiksuota, programuotojas gali nežinoti, kaip su ja elgtis. Skirtingai nuo tradicinio klaidų tvarkymo, išimtys leidžia atskirti klaidų apdorojimo kodą nuo įprasto kodo.