Pārbaudīts izņēmums pret izpildlaika izņēmumu
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 izņemšana ir izņēmuma objekta izveides process un tā nodošana izpildlaika sistēmai. Kad izpildlaika sistēma saņem izņēmuma objektu, tā mēģinās atrast kādu, kas to apstrādās izsaukuma stekā, šķērsojot to apgrieztā secībā (kādā tika izsauktas metodes). Izpildlaika sistēma ir veiksmīga, ja tā atrod metodi ar izņēmumu apstrādātāju. Izņēmumu apstrādātājs ir koda bloks, kas var oficiāli apstrādāt minēto izņēmumu. Ja izpildlaika sistēma atrod atbilstošu apdarinātāju, tā nodos izņēmuma objektu apdarinātājam. To sauc par izņēmuma noķeršanu. Tomēr, ja izņēmumu nevar apstrādāt, programma tiks pārtraukta. Java versijā izņēmumi tiek mantoti no Throwable klases. Atzīmētie izņēmumi ir izņēmumi, kuru apstrādi nodrošina kompilators. Izpildlaika izņēmumi ir izņēmumu veids, ko kompilators nepārbauda.
Kas ir atzīmētais izņēmums?
Atzīmētie izņēmumi ir vai nu klases java.lang.exception, vai tās apakšklases objekti (izņemot java.lang. RuntimeException un tās apakšklases). Pārbaudītie izņēmumi tiek “pārbaudīti” kompilēšanas laikā. Tas nozīmē, ka programmētājam šie izņēmumi ir jānoķer vai jāizmet, pretējā gadījumā kompilators sūdzēsies (izraisot kompilatora kļūdu). Šī iemesla dēļ programmētājiem ir ļoti labi zināmi daudzi pārbaudītie izņēmumi. Piemēram, IOException un tā apakšklases ir pārbaudīti izņēmumi, un ikreiz, kad programmētājs nodarbojas ar piekļuvi failam vai tā modificēšanu, kompilators pārbauda, vai programmētājs ir parūpējies par visiem iespējamiem IOExceptions.
Kas ir izpildlaika izņēmums?
Runtime Exceptions 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ītie izņēmumi, un tos var izmest vai apstrādāt kā pārbaudītus izņēmumus, taču kompilators neuzliek to apstrādi. Tāpēc izpildlaika izņēmumi pieder nepārbaudīto izņēmumu saimei. 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 pārbaudītie izņēmumi un izpildlaika izņēmumi ir nevēlami gadījumi programmas izpildes laikā, tiem ir savas atšķirības. Pārbaudīto izņēmumu apstrādi nodrošina kompilators, bet izpildlaika izņēmumus ne. Tāpēc, lai kods varētu kompilēt, ir jāizmet vai jāapstrādā pārbaudītie izņēmumi, taču attiecībā uz izpildlaika izņēmumiem šādas prasības nav. Līdz ar to izpildlaika izņēmumi kopā ar kļūdām ietilpst neatzīmēto izņēmumu kategorijā.
Trūkums ar pārbaudītiem izņēmumiem ir tāds, ka programmētājai ar to jātiek galā pat tad, ja viņa nezina, kā to izdarīt. Tātad, ja programmētājs vienkārši izmet jaunu izņēmumu, neiesaiņojot oriģinālu, steka izsekošana, kas pieder sākotnējam izņēmumam, tiks zaudēta. Šeit noder izpildlaika izņēmumi. Tā kā visus izpildlaika izņēmumus var apstrādāt vienuviet, programmētāji var rakstīt mazāku koda daudzumu. No otras puses, tā kā pārbaudītie izņēmumi ir jānoķer, programmētājam nav pārsteiguma. Viņa vienmēr zinās, kurš pārbaudītais izņēmums varētu tikt izmests ar noteiktu metodi. Pretēji tam bez programmētāja ziņas var tikt izmantoti dažādi izpildlaika izņēmumi.