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.
De
Provablock 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
Filereaderklass, det förväntas att du hanterar
IOExceptionsförknippad med att använda en
Filereaderobjekt, till exempel,
FileNotFoundExceptionoch
IOException. För att säkerställa att detta händer kan du placera uttalanden som handlar om att skapa och använda
Filereaderobjekt inuti a
Provablock: 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
De
fångablock (er) ger en plats att hantera det undantag som kastas av uttalanden inom en
Provablockera. De
fångablock definieras direkt efter
Provablockera. Den måste ange vilken typ av undantag den hanterar. Till exempel
Filereaderobjekt definierat i koden ovan kan kasta en
FileNotFoundExceptioneller en
IOException. Vi kan ange två
fångablock för att hantera båda dessa undantag:
FileNotFoundExceptioncatchblock 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
IOExceptionfå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.
fångablockera. Om koden vi ville placera i de två
fångablock 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.
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: