Izņēmums vs kļūda
Programmas palaišanas laikā var notikt negaidīta rīcība. Tas varētu būt saistīts ar izņēmumiem vai kļūdām. Izņēmumi ir notikumi, kas var traucēt parasto programmu plūsmu. Kļūdas ir apstākļi, kurus var uzskatīt par neatgūstamiem. Izņēmumi galvenokārt ir saistīti ar pašu lietojumprogrammu, savukārt kļūdas ir saistītas ar sistēmu, kurā darbojas programma.
Kāds ir izņēmums??
Izņēmums ir notikums, kas var traucēt parasto programmu 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. Izņēmuma objekts tiek izveidots, izmantojot metodi, ar kuru notika izņēmums. Izņēmuma objekts satur noderīgu informāciju, piemēram, izņēmuma veidu un aprakstu. 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). Zvanu kaudze ir sakārtots metožu saraksts, kuras tika izsauktas pirms metodes, kurā notika izņēmums. 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.i., izņēmuma tips atbilst tipam, kuru var apstrādāt), 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ņēmumi tiek iegūti no “izmestā klases”. NullPointerException un ArrayIndexOutOfBoundsException ir divi izplatīti Java izņēmumi.
Kas ir kļūda?
Kļūda ir nosacījums, ko var uzskatīt par neatgūstamu, piemēram, programmai, kurai nepieciešams lielāks atmiņas apjoms, nekā ir pieejams. Šīs kļūdas nevar novērst izpildlaikā. Ja rodas kļūda, programma tiks pārtraukta. Java valodā kļūdas tiek mantotas no Throvable klases. Kļūdas parasti nozīmē nopietnas problēmas, kuras programmētājam (vai lietojumprogrammai) nevajadzētu mēģināt noķert. Kļūdas ir vienkārši neparasti apstākļi, kas parasti nav paredzami normālos apstākļos un tāpēc nekad nav paredzēti. Piemēram, OutOfMemoryError, StackOverflowError un ThreadDead ir šādas kļūdas. Metodēm nekad nevajadzētu būt kļūdu apstrādātājiem.
Kāda ir atšķirība starp izņēmumu un kļūdu?
Gan kļūdas, gan izņēmumi ir nevēlami notikumi programmas izpildes laikā. Tomēr viņiem ir galvenās atšķirības. Programmētājs var paredzēt izņēmumus, savukārt kļūdu ir grūti paredzēt. Izņēmumus var pārbaudīt vai noņemt atzīmi. Bet kļūdas vienmēr netiek pārbaudītas. Izņēmumi parasti norāda kļūdu, ko izraisījis programmētājs. Tomēr kļūdas rodas sistēmas kļūdas vai resursa nepareizas izmantošanas dēļ. Tāpēc izņēmumi būtu jārisina lietojumprogrammu līmenī, savukārt par kļūdām būtu jārūpējas sistēmas līmenī (tikai ja iespējams). Pēc izņēmuma izskatīšanas jums tiek garantēta atgriešanās normālā programmas plūsmā. Bet pat tad, ja tiek pieķerta kļūda, programmētājs, iespējams, nezina, kā ar to rīkoties. Atšķirībā no tradicionālās kļūdu apstrādes, izņēmumi ļauj atdalīt kļūdu apstrādes kodu no parastā koda.