Pārbaudīts izņēmums vs izpildlaika izņēmums
Izņēmumi ir īpaša veida notikumi, kas var traucēt normālu programmas plūsmu. Nosaukuma izņēmums nāk no “ārkārtas notikuma”. Izņēmuma noteikšana ir process, kurā tiek izveidots izņēmuma objekts un nodots to izpildlaika sistēmai. Kad izpildlaika sistēma saņem izņēmuma objektu, tā mēģinās atrast kādu, kas to apstrādātu zvana kaudzē, pārvietojot to apgrieztā secībā (kurā metodes tika izsauktas). Runtime sistēma ir veiksmīga, ja tā atrod metodi ar izņēmuma apstrādātāju. Izņēmuma apstrādātājs ir koda bloks, kas var oficiāli rīkoties ar minēto izņēmumu. Ja izpildlaika sistēma atrod atbilstošu apstrādātāju, tā nodos izņēmuma objektu apstrādātājam. To sauc par izņēmuma panākšanu. Tomēr, ja izņēmumu nevar izskatīt, programma tiks pārtraukta. Java valodā izņēmumus pārņem no Throvable klases. Pārbaudīti izņēmumi ir izņēmumi, attiecībā uz kuriem kompilators izpilda apstrādi. Izpildlaika izņēmumi ir izņēmumu veids, kuru kompilators nepārbauda.
Kas ir pārbaudīts izņēmums??
Pārbaudītie izņēmumi ir vai nu klases java.lang.exception objekti, vai arī tās apakšklases (izņemot java.lang.RuntimeException un tās apakšklases). Pārbaudītie izņēmumi tiek “pārbaudīti” sastādīšanas laikā. Tas nozīmē, ka programmētājam ir jānoķer vai jāizmet šie izņēmumi, pretējā gadījumā kompilators sūdzas (izraisot kompilatora kļūdu). Šī iemesla dēļ programmētāji ļoti labi zina daudzus pārbaudītos izņēmumus. Piemēram, IOException un tās apakšklases tiek pārbaudītas kā izņēmumi, un ikreiz, kad programmētājs nodarbojas ar piekļuvi failam vai tā modificēšanu, kompilators pārbauda, lai pārliecinātos, ka programmētājs rūpējas par visiem iespējamiem IOExmissions..
Kāds ir izpildlaika izņēmums??
Runtime Exhibition sastāv no java.lang.RuntimeException un visām tā apakšklasēm. Teorētiski runājot, tie kalpo tam pašam mērķim kā pārbaudīti izņēmumi, un tos var izmest vai rīkoties tāpat kā pārbaudītus izņēmumus, taču kompilators tos neveic. Tāpēc izpildlaika izņēmumi pieder pie nepārbaudītu izņēmumu grupas. NullPointerException, NumberFormatEception, ClassCastException un ArrayIndexOutOfBoundsException ir izplatīti Java izpildlaika izņēmumi.
Kāda ir atšķirība starp pārbaudīto izņēmumu un izpildlaika izņēmumu?
Lai gan gan pārbaudīti izņēmumi, gan izpildlaika izņēmumi ir nevēlami notikumi programmas izpildes laikā, tiem ir atšķirības. Pārbaudītu izņēmumu apstrādi nodrošina kompilators, taču izpildlaika izņēmumi nav. Tāpēc, lai kods apkopotos, ir jāizmet pārbaudīti izņēmumi vai jārīkojas ar tiem, bet attiecībā uz izpildlaika izņēmumiem šāda prasība nepastāv. Līdz ar to izpildlaika izņēmumi kopā ar kļūdām pieder pie nekontrolētiem izņēmumu kategorijas.
Trūkums ar pārbaudītiem izņēmumiem ir tāds, ka programmētājam tas ir jārisina pat tad, ja viņa nezina. Tātad, ja programmētājs vienkārši izmet jaunu izņēmumu, neiesaiņojot oriģinālu, kaudzes pēdas, kas pieder sākotnējam izņēmumam, tiks zaudētas. Šajā gadījumā noderīgi ir izpildlaika izņēmumi. Tā kā visus izpildlaika izņēmumus var apstrādāt vienā vietā, programmētāji var rakstīt mazāk koda. No otras puses, tā kā ir jānoķer pārbaudīti izņēmumi, programmētāju tas nepārsteidz. Viņa vienmēr zinās, kuru pārbaudīto izņēmumu varētu izmest ar noteiktu metodi. Pretēji tam bez programmētāja zināšanām var izmest dažādus izpildlaika izņēmumus.