I handledningen lär vi oss om olika tillvägagångssätt för undantagshantering i Java med hjälp av exempel.
I den senaste handledningen lärde vi oss Java-undantag. Vi vet att undantag onormalt avslutar genomförandet av ett program.
Det är därför det är viktigt att hantera undantag. Här är en lista över olika metoder för att hantera undantag i Java.
- försök … fånga block
- slutligen blockera
- kasta och kasta nyckelord
1. Java-försök … fångstblock
Try-catch-blocket används för att hantera undantag i Java. Här är syntaxen för try… catch
block:
try ( // code ) catch(Exception e) ( // code )
Här har vi placerat koden som kan generera ett undantag inuti try
blocket. Varje try
block följs av ett catch
block.
När ett undantag inträffar fångas det av catch
blocket. Den catch
blocket kan inte användas utan try
block.
Exempel: Undantagshantering med try … catch
class Main ( public static void main(String() args) ( try ( // code that generate exception int divideByZero = 5 / 0; System.out.println("Rest of code in try block"); ) catch (ArithmeticException e) ( System.out.println("ArithmeticException => " + e.getMessage()); ) ) )
Produktion
ArithmeticException => / med noll
I exemplet försöker vi dela ett tal med 0
. Här genererar den här koden ett undantag.
För att hantera undantaget har vi lagt koden 5 / 0
inuti try
blocket. Nu när ett undantag inträffar try
hoppas resten av koden inuti blocket.
Den catch
blocket fångar undantaget och uttalanden inne fångsten blocket exekveras.
Om inget av påståendena i try
blocket genererar ett undantag catch
hoppas blocket över.
2. Java slutligen blockera
I Java finally
körs blocket alltid oavsett om det finns ett undantag eller inte.
Det finally
blocket är valfritt. Och för varje try
block kan det bara finnas ett finally
block.
Den grundläggande syntaxen för finally
block är:
try ( //code ) catch (ExceptionType1 e1) ( // catch block ) finally ( // finally block always executes )
Om ett undantag inträffar finally
körs try… catch
blocket efter blocket. Annars körs den efter försöksblocket. För varje try
block kan det bara finnas ett finally
block.
Exempel: Java Exception Handling med slutligt block
class Main ( public static void main(String() args) ( try ( // code that generates exception int divideByZero = 5 / 0; ) catch (ArithmeticException e) ( System.out.println("ArithmeticException => " + e.getMessage()); ) finally ( System.out.println("This is the finally block"); ) ) )
Produktion
ArithmeticException => / med noll Detta är slutligen blocket
I exemplet ovan delar vi ett tal med 0 inuti try
blocket. Här genererar den här koden en ArithmeticException
.
Undantaget fångas av catch
blocket. Och sedan finally
körs blocket.
Obs! Det är bra att använda finally
blocket. Det beror på att det kan innehålla viktiga saneringskoder som,
- kod som av misstag kan hoppas över genom att returnera, fortsätta eller bryta
- stänga en fil eller anslutning
3. Java kasta och kasta nyckelord
Java- throw
nyckelordet används för att uttryckligen kasta ett enda undantag.
När vi är throw
ett undantag flyttas flödet av programmet från try
blocket till catch
blocket.
Exempel: Undantagshantering med Java-kast
class Main ( public static void divideByZero() ( // throw an exception throw new ArithmeticException("Trying to divide by 0"); ) public static void main(String() args) ( divideByZero(); ) )
Produktion
Undantag i tråden "main" java.lang.ArithmeticException: Försöker dela med 0 vid Main.divideByZero (Main.java:5) vid Main.main (Main.java:9)
I exemplet ovan kastar vi uttryckligen med ArithmeticException
hjälp av throw
nyckelordet.
På samma sätt används throws
nyckelordet för att deklarera vilken typ av undantag som kan förekomma inom metoden. Den används i metoddeklarationen.
Exempel: Java kastar nyckelord
import java.io.*; class Main ( // declareing the type of exception public static void findFile() throws IOException ( // code that may generate IOException File newFile = new File("test.txt"); FileInputStream stream = new FileInputStream(newFile); ) public static void main(String() args) ( try ( findFile(); ) catch (IOException e) ( System.out.println(e); ) ) )
Produktion
java.io.FileNotFoundException: test.txt (Systemet kan inte hitta den angivna filen)
När filen test.txt inte existerar, kör vi FileInputStream
ett FileNotFoundException
som utökar IOException
klassen.
Den findFile()
metod anger att en IOException
kan kastas. Den main()
metodanrop denna metod och hanterar undantag om det kastas.
Om en metod inte hanterar undantag måste typen av undantag som kan förekomma inom den anges i throws
klausulen.
För att lära dig mer, besök Java kast och kast.