Vad är en undantagshanterare i Java?

I Java är undantag en av många strukturer som reglerar kontrollflödet för ett program. Specifikt är de oavsiktliga biverkningar av ett programs normala utförande. När du skriver kod som kan stöta på undantag måste programmeraren definiera nya instruktioner för programmet om det möter ett undantag, en process som kallas "undantagshantering". Exception handlers är gjorda av tre olika block: försök, fånga och slutligen.

Java undantag

När ett program kallar en metod som beter sig på ett oväntat sätt, sägs det ha uppstått ett "undantag". Om programmet till exempel försöker dela ett tal med noll eller ladda en fil som inte existerar, kanske programmet inte beter sig som förväntat och kommer att göra ett undantag för att signalera detta fel. Om en metod definieras för att kasta ett undantag i metodkroppen kan du bara anropa det inom en undantagshanterare - eller överför felet uppe på trädet genom att förklara att metoden som åberopar den också kastar samma undantag.

Prova block

I en framgångsrik undantagshanterare måste den metod som kastar undantaget innehålla ett "försök" -block, som i "försök {exceptionThrowingMethod ();}" När provblocket har definierats definierar programmeraren fångstblock som tar undantagsmetoderna Innehållet i försöket block kasta.

Fångstblock

Ett enda försöksblock kan ha flera "catch" -block för att definiera olika beteenden när ett undantag uppstår. Om ett program möter ett undantag som definieras i flera fångstblock, kommer det först att köra det högsta fångstblocket. Som alla undantag härstammar från undantagsklassen innebär detta att om ditt första fångstblock läser "fångst (Undantag e) {}", kommer ett program alltid att springa det blocket när det möter ett undantag, och aldrig någon av de andra. Ordna dina fångstblock från de mest specifika till de minst specifika om du vill ha finkorrigerad kontroll över ditt program.

Slutligen blockerar

Ett "slutligen" block är en valfri komponent i en undantagshanterare. Använd den för att definiera beteende som alltid ska utföras även om ett undantag uppstår. Det behövs i vissa fall eftersom du inte kan garantera att den sista delen av försöksblocket kommer att utföras. Om ett undantag kastas och fångas, kommer blocket att avbrytas vid den tiden. Till exempel, att placera "InputStream.close ()" i ett slutligt block säkerställer att oavsett ett undantag som kastas tidigare i koden kommer dina flöden att stängas säkert.

Populära Inlägg