Kļūdas ir vienādi gan lietotājiem, gan programmētājiem. Izstrādātāji acīmredzami nevēlas, lai viņu programmas apgāztos ik uz soļa, un lietotāji tagad ir tik pieraduši, ka tajās ir kļūdas programmas, kuras viņi gremdīgi piekrīt maksāt cenu par programmatūru, kurā gandrīz noteikti būs vismaz viena kļūda tā. Java ir paredzēts, lai dotu programmētājam sportiskas iespējas, izstrādājot bez kļūdām lietojumprogrammu. Ir izņēmumi, kas programmētājam būs zināmi, ja lietojumprogramma mijiedarbojas ar resursu vai lietotāju, un šos izņēmumus var apstrādāt. Diemžēl ir izņēmumi, kurus programmētājs nevar kontrolēt vai vienkārši ignorēt. Īsāk sakot, visi izņēmumi nav radīti vienādi, un tāpēc programmētājam ir vairāki veidi, par kuriem padomāt.
Izņēmums ir notikums, kura dēļ programma nespēj plūst paredzētajā izpildē. Ir trīs izņēmumu veidi - pārbaudītais izņēmums, kļūda un izpildlaika izņēmums.
Pārbaudīts izņēmums
Pārbaudīti izņēmumi ir izņēmumi, ar kuriem Java lietojumprogrammai jāspēj tikt galā. Piemēram, ja lietojumprogramma nolasa datus no faila, tai vajadzētu būt spējīgai rīkoties ar
FileNotFoundException
. Galu galā nav garantijas, ka paredzamais fails atradīsies tur, kur tam vajadzētu būt. Failu sistēmā var notikt jebkas, par ko lietojumprogrammai nebūs ne mazākās jausmas.Lai ņemtu šo piemēru soli tālāk. Teiksim, ka mēs izmantojam FileReader
klase, lai lasītu rakstzīmju failu. Ja jums ir skats uz FileReader konstruktora definīcija Java api jūs redzēsit, tas ir paraksts:
publisks FileReader (virknes faila nosaukums) izmet FileNotFoundException.
Kā redzat, konstruktors īpaši apgalvo, ka FileReader
konstruktors var mest a FileNotFoundException
. Tam ir jēga, jo ir ļoti iespējams, ka faila nosaukums
Stīga laiku pa laikam būs nepareiza. Apskatiet šo kodu:
public static void main (stīgas [] args) { FileReader fileInput = nulle; // Atveriet ievades failu. fileInput = jauns FileReader ("Untitled.txt"); }
Sintaktiski apgalvojumi ir pareizi, taču šis kods nekad netiks sastādīts. Sastādītājs zina FileReader
konstruktors var mest a FileNotFoundException
un šo izņēmumu var izskatīt izsaucošajā kodā. Ir divas izvēles iespējas - pirmkārt, mēs varam novirzīt izņēmumu no mūsu metodes, norādot a met
arī klauzula:
publiski statiskā tukšā galvenā (virkne [] args) izmet FileNotFoundException { FileReader fileInput = nulle; // Atveriet ievades failu. fileInput = jauns FileReader ("Untitled.txt"); }
Vai arī mēs faktiski varam rīkoties, izņemot:
public static void main (stīgas [] args) { FileReader fileInput = nulle; mēģiniet. { // Atveriet ievades failu. fileInput = jauns FileReader ("Untitled.txt"); } noķert (FileNotFoundException ex) { // pateikt lietotājam, lai viņš aiziet un atrod failu. } }
Labi uzrakstītām Java lietojumprogrammām jāspēj tikt galā ar pārbaudītajiem izņēmumiem.
Kļūdas
Otro izņēmumu veidu sauc par kļūdu. Ja rodas izņēmums, JVM izveidos izņēmuma objektu. Visi šie objekti izriet no Metamie
klase. Metamie
klasei ir divas galvenās apakšklases - Kļūda
un Izņēmums
. Kļūda
klase apzīmē izņēmumu, kuru lietojumprogramma, visticamāk, nespēs izskatīt.
Šie izņēmumi tiek uzskatīti par retiem. Piemēram, JVM var beigties resursi, jo aparatūra nespēj tikt galā ar visiem procesiem, kas tai ir jāsaskaras. Ir iespējams, ka lietojumprogramma var noķert kļūdu, lai paziņotu lietotājam, taču parasti lietojumprogrammai būs jāslēdz, līdz tiek atrisināta pamata problēma.
Runtime Izņēmumi
A izpildlaika izņēmums notiek tikai tāpēc, ka programmētājs ir kļūdījies. Jūs esat uzrakstījis kodu, tas viss labi izskatās kompilatoram, un, dodoties palaist kodu, tas apgāžas, jo tas ir mēģināja piekļūt masīva elementam, kas neeksistē, vai loģikas kļūda izraisīja metodes izsaukšanu ar nulli vērtību. Vai arī jebkāds kļūdu skaits, ko programmētājs var izdarīt. Bet tas ir labi, mēs pamanām šos izņēmumus, veicot visaptverošu pārbaudi, vai ne?
Kļūdas un izpildlaika izņēmumi ietilpst nepārbaudītu izņēmumu kategorijā.