Hva er en unntakshandler i Java?

I Java er unntak en av mange strukturer som styrer kontrollflyten til et program. Spesielt er de utilsiktede bivirkninger av et programs normale utførelse. Når du skriver kode som kan oppleve unntak, må programmøren definere nye instruksjoner for programmet hvis det møter et unntak, en prosess kjent som "unntakshåndtering". Unntakshåndterer er laget av tre forskjellige blokker: prøv, fangst og til slutt.

Java unntak

Når et program kaller en metode som oppfører seg på en uventet måte, sies det å ha oppstått et "unntak". Hvis for eksempel programmet forsøker å dele et tall med null eller laste inn en fil som ikke eksisterer, kan programmet ikke oppføre seg som forventet, og vil kaste et unntak for å signalisere denne feilen. Hvis en metode er definert for å kaste et unntak i metodekroppen, kan du bare påkalle det i en unntakshåndterer - eller sende feilen opp treet ved å erklære at metoden som påkaller den, også kaster det samme unntaket.

Prøv blokker

I en vellykket unntakshåndterer må metoden som kaster unntaket inneholdes i en "prøve" blokk, som i "try {exceptionThrowingMethod ();}" Etter at prøveblokken er definert, definerer programmøren fangstblokker som fanger unntaksmetodene inneholdt i prøveblokkkastet.

Fangstblokker

En enkelt prøveblokk kan ha flere "fange" blokker for å definere ulike oppføringer når et unntak oppstår. Hvis et program møter et unntak som er definert i flere fangstblokker, vil det først kjøre den øverste fangstblokken. Som alle unntakene stammer fra unntaksklassen, betyr dette at hvis din første fangstblokk leser "fange (Unntak e) {}", vil et program alltid kjøre den blokken når den møter et unntak, og aldri noen av de andre. Ordne fangstblokkene dine fra de mest spesifikke til minst spesifikt hvis du vil ha finkorrigert kontroll over programmet ditt.

Endelig blokkerer

En "endelig" blokk er en valgfri komponent av en unntakshåndterer. Bruk den til å definere atferd som alltid skal utføres selv om et unntak oppstår. Det er nødvendig i noen tilfeller fordi du ikke kan garantere at siste del av prøveblokken vil utføres. Hvis et unntak kastes og fanges, vil denne blokken bli avbrutt på det tidspunktet. For eksempel vil plassering av "InputStream.close ()" i en endelig blokk sikre at uansett et unntak kastet tidligere i koden, blir strømmen din lukket sikkert.

Populære Innlegg