I vejledningen lærer vi om forskellige tilgange til håndtering af undtagelser i Java ved hjælp af eksempler.
I den sidste tutorial lærte vi om Java-undtagelser. Vi ved, at undtagelser unormalt afslutter udførelsen af et program.
Derfor er det vigtigt at håndtere undtagelser. Her er en liste over forskellige tilgange til håndtering af undtagelser i Java.
- prøv … fang blok
- endelig blokere
- kaste og kaste nøgleord
1. Java prøv … fang blok
Try-catch-blokken bruges til at håndtere undtagelser i Java. Her er syntaksen for try… catch
blok:
try ( // code ) catch(Exception e) ( // code )
Her har vi placeret den kode, der muligvis genererer en undtagelse inde i try
blokken. Hver try
blok efterfølges af en catch
blok.
Når en undtagelse opstår, fanges den af catch
blokken. Den catch
blok kan ikke bruges uden try
blok.
Eksempel: Undtagelseshåndtering ved hjælp af prøve … fangst
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 => / ved nul
I eksemplet prøver vi at dele et tal med 0
. Her genererer denne kode en undtagelse.
For at håndtere undtagelsen har vi lagt koden 5 / 0
inde i try
blokken. Nu når en undtagelse opstår, try
springes resten af koden inde i blokken over.
Den catch
blok fanger undtagelsen og udsagn inde i catch-blok udføres.
Hvis ingen af udsagnene i try
blokken genererer en undtagelse, catch
springes blokken over.
2. Java blokerer endelig
I Java finally
udføres blokken altid, uanset om der er en undtagelse eller ej.
Den finally
blok er valgfri. Og for hver try
blok kan der kun være en finally
blok.
Den grundlæggende syntaks for finally
blok er:
try ( //code ) catch (ExceptionType1 e1) ( // catch block ) finally ( // finally block always executes )
Hvis der opstår en undtagelse, finally
udføres try… catch
blokken efter blokken. Ellers udføres den efter prøveblokken. For hver try
blok kan der kun være en finally
blok.
Eksempel: Java Exception Handling ved hjælp af endelig blok
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 => / ved nul Dette er den sidste blok
I eksemplet ovenfor deler vi et tal med 0 inde i try
blokken. Her genererer denne kode en ArithmeticException
.
Undtagelsen er fanget af catch
blokken. Og så finally
udføres blokken.
Bemærk : Det er en god praksis at bruge finally
blokken. Det er fordi det kan omfatte vigtige oprydningskoder som f.eks.
- kode, der ved et uheld kan springes over ved returnering, fortsættelse eller pause
- lukke en fil eller forbindelse
3. Java kaster og kaster nøgleord
Java- throw
nøgleordet bruges til eksplicit at kaste en enkelt undtagelse.
Når vi er throw
en undtagelse, flytter programmets flow fra try
blokken til catch
blokken.
Eksempel: Undtagelseshåndtering ved hjælp af 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
Exception in thread "main" java.lang.ArithmeticException: Trying to divide by 0 at Main.divideByZero(Main.java:5) at Main.main(Main.java:9)
In the above example, we are explicitly throwing the ArithmeticException
using the throw
keyword.
Similarly, the throws
keyword is used to declare the type of exceptions that might occur within the method. It is used in the method declaration.
Example: Java throws keyword
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); ) ) )
Output
java.io.FileNotFoundException: test.txt (The system cannot find the file specified)
When we run this program, if the file test.txt does not exist, FileInputStream
throws a FileNotFoundException
which extends the IOException
class.
Den findFile()
metode angiver, at en IOException
kan kastes. Den main()
metode kalder denne metode og håndterer undtagelsen, hvis den kastes.
Hvis en metode ikke håndterer undtagelser, skal typen af undtagelser, der kan forekomme inden for den, specificeres i throws
klausulen.
For at lære mere, besøg Java-kast og kast.