Java Exception Handling (med eksempler)

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… catchblok:

 try ( // code ) catch(Exception e) ( // code )

Her har vi placeret den kode, der muligvis genererer en undtagelse inde i tryblokken. Hver tryblok efterfølges af en catchblok.

Når en undtagelse opstår, fanges den af catchblokken. Den catchblok kan ikke bruges uden tryblok.

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 / 0inde i tryblokken. Nu når en undtagelse opstår, tryspringes resten af ​​koden inde i blokken over.

Den catchblok fanger undtagelsen og udsagn inde i catch-blok udføres.

Hvis ingen af ​​udsagnene i tryblokken genererer en undtagelse, catchspringes blokken over.

2. Java blokerer endelig

I Java finallyudføres blokken altid, uanset om der er en undtagelse eller ej.

Den finallyblok er valgfri. Og for hver tryblok kan der kun være en finallyblok.

Den grundlæggende syntaks for finallyblok er:

 try ( //code ) catch (ExceptionType1 e1) ( // catch block ) finally ( // finally block always executes )

Hvis der opstår en undtagelse, finallyudføres try… catchblokken efter blokken. Ellers udføres den efter prøveblokken. For hver tryblok kan der kun være en finallyblok.

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 tryblokken. Her genererer denne kode en ArithmeticException.

Undtagelsen er fanget af catchblokken. Og så finallyudføres blokken.

Bemærk : Det er en god praksis at bruge finallyblokken. 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- thrownøgleordet bruges til eksplicit at kaste en enkelt undtagelse.

Når vi er throwen undtagelse, flytter programmets flow fra tryblokken til catchblokken.

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 IOExceptionkan 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 throwsklausulen.

For at lære mere, besøg Java-kast og kast.

Interessante artikler...