Hvad er en undtagelseshandler i Java?

I Java er undtagelser en af ​​mange strukturer, der styrer kontrolflowet af et program. Specielt er de utilsigtede bivirkninger af et programs normale udførelse. Når der skrives kode, der kan støde på undtagelser, skal programmøren definere nye instruktioner til programmet, hvis det møder en undtagelse, en proces, der kaldes "undtagelsesbehandling". Undtagelseshandlere er lavet af tre forskellige blokke: prøv, fangst og endelig.

Java undtagelser

Når et program kalder en metode, der opfører sig på en uventet måde, siges det at have oplevet en "undtagelse". For eksempel, hvis programmet forsøger at dele et nummer med nul eller indlæse en fil, der ikke findes, kan programmet muligvis ikke opføre sig som forventet, og det vil give en undtagelse for at signalere denne fejl. Hvis en metode er defineret til at kaste en undtagelse i metodekroppen, kan du kun påberåbe den inden for en undtagelseshandler - eller send fejlen op i træet ved at erklære, at metoden, der påberåber den, også smider den samme undtagelse.

Prøv blokke

I en succesfrit undtagelseshandler skal metoden, der kaster undtagelsen, være indeholdt i en "prøve" -blok, som i "try {exceptionThrowingMethod ();}" Når prøveblokken er defineret, definerer programmør fangstblokke, der tager undtagelsesmetoderne indeholdt i prøve blokke kaste.

Fangstblokke

En enkelt prøveblok kan have flere "catch" -blokke til at definere forskellige adfærd, når der opstår en undtagelse. Hvis et program støder på en undtagelse, der er defineret i flere fangstblokke, kører den først den øverste fangstblok først. Som alle undtagelser stammer fra undtagelsesklassen betyder dette, at hvis din første fangstblok læser "catch (Exception e) {}", vil et program altid køre den blok, når den møder en undtagelse, og aldrig nogen af ​​de andre. Arranger dine fangstblokke fra de mest specifikke til de mindst specifikke, hvis du vil have finkornet kontrol over dit program.

Endelig Blokerer

En "endelig" blok er en valgfri komponent af en undtagelseshandler. Brug den til at definere adfærd, som altid skal udføres, selvom der opstår en undtagelse. Det er nødvendigt i nogle tilfælde, fordi du ikke kan garantere, at den sidste del af prøveblokken vil udføres. Hvis en undtagelse kastes og fanges, vil denne blok blive afbrudt på det tidspunkt. For eksempel sikrer placeringen af ​​"InputStream.close ()" i en endelig blok, at uanset en undtagelse, der kastes tidligere i koden, lukkes dine strømme sikkert.

Populære Indlæg