Der er to typer undtagelser: markeret undtagelse og ikke-markeret undtagelse. I denne vejledning vil vi diskutere dem. Den største forskel mellem markeret og ukontrolleret undtagelse er, at de markerede undtagelser kontrolleres på kompileringstid, mens ikke-markerede undtagelser kontrolleres ved kørsel.
Hvad er markeret undtagelser?
kontrollerede undtagelser kontrolleres på kompileringstidspunktet., Det betyder, at hvis en metode kaster en kontrolleret undtagelse, skal den håndtere undtagelsen ved hjælp af try-catch block, eller den skal erklære undtagelsen ved hjælp af kast søgeord, ellers giver programmet en kompileringsfejl.
lad os forstå dette ved hjælp af et eksempel:
Kontrolleres Undtagelse Eksempel
I dette eksempel har vi læser filen myfile.txt
og viser deres indhold på skærmen. I dette program er der tre steder, hvor en kontrolleret undtagelse kastes som nævnt i kommentarerne nedenfor., FileInputStream som bruges til at angive filsti og navn, kaster FileNotFoundException
. Læs () – metoden, der læser filindholdet, kaster IOException
og luk () – metoden, der lukker filinputstrømmen, kaster også IOException
.
Output:
Exception in thread "main" java.lang.Error: Unresolved compilation problems: Unhandled exception type FileNotFoundExceptionUnhandled exception type IOExceptionUnhandled exception type IOException
Hvorfor denne samling fejl? Som jeg nævnte i starten, bliver kontrollerede undtagelser kontrolleret i løbet af kompileringstiden. Da vi ikke håndterede/erklærede undtagelserne, gav vores program kompileringsfejlen.
Sådan løses fejlen?, Der er to måder at undgå denne fejl på. Vi vil se begge måder en efter en.
Metode 1: Angiv undtagelsen ved hjælp af kast søgeord.
som vi ved, at alle tre forekomster af kontrollerede undtagelser er inde main() metode, så en måde at undgå kompilering fejl er: erklære undtagelsen i metoden ved hjælp kaster søgeord. Du tænker måske, at vores kode er at smide FileNotFoundException og IOException både derefter, hvorfor vi erklære IOException alene. Årsagen er, at IOE .ception er en forælder klasse af Filenotfounde .ception så det som standard dækker, at., Hvis du vil, kan du erklære dem sådan public static void main(String args) throws IOException, FileNotFoundException
.
Output:
filindhold vises på skærmen.
Metode 2: håndter dem ved hjælp af try-catch blokke.
den tilgang, vi har brugt ovenfor, er slet ikke god. Det er ikke den bedste undtagelseshåndteringspraksis. Du skal give en meningsfuld besked for hver undtagelsestype, så det ville være let for nogen at forstå fejlen. Koden skal være sådan:
denne kode kører fint og viser filindholdet.,
Her er de få andre Kontrollerede Undtagelser –
SQLException
IOException
ClassNotFoundException
InvocationTargetException
Hvad er Markeret undtagelser?
ikke-markerede undtagelser kontrolleres ikke på kompileringstidspunktet. Det betyder, at hvis dit program kaster en ukontrolleret undtagelse, og selvom du ikke håndterede/erklærede denne undtagelse, giver programmet ikke en kompileringsfejl. De fleste af de gange disse undtagelse opstår på grund af de dårlige data, som brugeren under bruger-program interaktion., Det er op til programmøren at bedømme betingelserne på forhånd, der kan forårsage sådanne undtagelser og håndtere dem på passende vis. Alle ukontrollerede undtagelser er direkte underklasser af Runtimee .ception klasse.
lad os forstå dette med et eksempel:
Ukontrolleret Undtagelse Eksempel
Hvis du kompilere denne kode, det ville udarbejde held dog, når du vil køre den, det ville smide ArithmeticException
. Det viser tydeligt, at ukontrollerede undtagelser ikke kontrolleres ved kompileringstid, de forekommer ved kørsel. Lad os se et andet eksempel.,
denne kode vil også kompilere med succes, da ArrayIndexOutOfBoundsException
også er en ukontrolleret undtagelse.bemærk: det betyder ikke, at compiler ikke kontrollerer disse undtagelser, så vi bør ikke håndtere dem. Faktisk bør vi håndtere dem mere omhyggeligt. For eksempel i ovenstående eksempel skal der være en undtagelsesmeddelelse til brugeren om, at de forsøger at vise en værdi, der ikke findes i array, så brugeren kan rette problemet.,
Output:
The specified index does not exist in array. Please correct the error.
Here are the few unchecked exception classes:
NullPointerException
ArrayIndexOutOfBoundsException
ArithmeticException
IllegalArgumentException
NumberFormatException