Try-catch-slutligen blockerar i Java

För att göra ett Java-program så robust som möjligt måste det kunna hantera undantag. Kompilatorn gör sin del genom att inte låta dig kompilera ett program förrän det är syntaktiskt korrekt och kan också påpeka kontrollerade undantag som måste hanteras. Men de undantag som troligtvis orsakar mest huvudvärk är de som visas när programmet körs. För att hjälpa till att hantera dessa undantag ger Java-språket try-catch-äntligen block.

Försök Blockera

De

Prova
block omsluter alla uttalanden som kan leda till att ett undantag inträffar. Om du till exempel läser data från en fil med hjälp av
Filereader
klass, det förväntas att du hanterar
IOExceptions
förknippad med att använda en
Filereader
objekt, till exempel,
FileNotFoundException
och
IOException
. För att säkerställa att detta händer kan du placera uttalanden som handlar om att skapa och använda
Filereader
objekt inuti a
Prova
block: Koden är dock ofullständig eftersom vi behöver en plats för att undantaget ska hanteras för att undantaget ska hanteras. Detta händer i

fångstblock. Fångstblocket

De

fånga
block (er) ger en plats att hantera det undantag som kastas av uttalanden inom en
Prova
blockera. De
fånga
block definieras direkt efter
Prova
blockera. Den måste ange vilken typ av undantag den hanterar. Till exempel
Filereader
objekt definierat i koden ovan kan kasta en
FileNotFoundException
eller en
IOException
. Vi kan ange två
fånga
block för att hantera båda dessa undantag:
FileNotFoundExceptioncatch
block vi kunde placera kod för att be användaren att hitta filen för oss och sedan försöka läsa filen igen. I
IOException
fångst block, kanske vi bara vidarebefordrar I / O-felet till användaren och ber dem prova något annat. Hur som helst, vi har gett ett sätt för programmet att få ett undantag och hantera det på ett kontrollerat sätt.
I Java SE 7 blev det möjligt att hantera flera undantag i ett
fånga
blockera. Om koden vi ville placera i de två
fånga
block ovan var exakt samma som vi kunde skriva koden så här istället: För att göra lite hushållning så långt resurserna går kan vi lägga till ett slutligt block. När allt kommer omkring vill vi släppa filen vi har läst från när vi är klara.

Det slutliga blocket

Uttalningarna i det slutliga blocket körs alltid. Detta är användbart för att rensa upp resurser om försöksblocket körs utan undantag och i de fall då det finns ett undantag. I båda eventualiteterna kan vi stänga filen vi har använt. 

Det slutliga blocket visas direkt efter det senaste fångstblocket: