Java kaster og kaster Keyword

I denne vejledning lærer vi at bruge kaste og kaste nøgleord til undtagelseshåndtering ved hjælp af eksempler.

I Java kan undtagelser kategoriseres i to typer:

  • Ikke markeret Undtagelser: De er ikke kontrolleret ved compile-tid, men ved run-time.For eksempel: ArithmeticException, NullPointerException, ArrayIndexOutOfBoundsException, Undtagelserne i Errorklassen, etc.
  • Kontrollerede undtagelser: De kontrolleres ved kompileringstidspunktet. For eksempel IOException, InterruptedExceptionetc.

Se Java-undtagelser for at lære mere om afkrydsede og ikke-markerede undtagelser.

Normalt behøver vi ikke håndtere ukontrollerede undtagelser. Det skyldes, at der ikke er markeret undtagelser på grund af programmeringsfejl. Og det er en god praksis at rette dem i stedet for at håndtere dem.

Denne vejledning vil nu fokusere på, hvordan man håndterer kontrollerede undtagelser ved hjælp af throwog throws.

Java kaster nøgleord

Vi bruger throwsnøgleordet i metodedeklarationen til at erklære den type undtagelser, der kan forekomme inden for det.

Dens syntaks er:

 accessModifier returnType methodName() throws ExceptionType1, ExceptionType2… ( // code ) 

Som du kan se fra ovenstående syntaks, kan vi bruge throwstil at erklære flere undtagelser.

Eksempel 1: Java kaster Keyword

 import java.io.*; class Main ( public static void findFile() throws IOException ( // code that may produce 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 (Ingen sådan fil eller bibliotek) 

Når vi kører dette program, hvis filen test.txtikke findes, FileInputStreamkaster en FileNotFoundExceptionsom udvider IOExceptionklassen.

Hvis en metode ikke håndterer undtagelser, skal typen af ​​undtagelser, der kan forekomme inden for den, specificeres i throwsklausulen, så metoder længere op i opkaldstakken kan håndtere dem eller specificere dem ved hjælp af throwsnøgleordet selv.

Den findFile()metode angiver, at en IOExceptionkan kastes. Den main()metode kalder denne metode og håndterer undtagelsen, hvis den kastes.

Kaster flere undtagelser

Her er hvordan vi kan kaste flere undtagelser ved hjælp af throwsnøgleordet.

 import java.io.*; class Main ( public static void findFile() throws NullPointerException, IOException, InvalidClassException ( // code that may produce NullPointerException… … … // code that may produce IOException… … … // code that may produce InvalidClassException… … … ) public static void main(String() args) ( try( findFile(); ) catch(IOException e1)( System.out.println(e1.getMessage()); ) catch(InvalidClassException e2)( System.out.println(e2.getMessage()); ) ) ) 

Her findFile()metoden angiver, at det kan kaste NullPointerException, IOExceptionog InvalidClassExceptioni sin throwsklausul.

Bemærk, at vi ikke har håndteret NullPointerException. Dette er fordi det er en ukontrolleret undtagelse. Det er ikke nødvendigt at specificere det i throwsklausulen og håndtere det.

kaster nøgleord Vs. prøv … fang … endelig

Der kan være flere metoder, der kan forårsage undtagelser. Skrivning try… catchtil hver metode vil være kedelig, og koden bliver lang og mindre læselig.

throws er også nyttigt, når du har markeret undtagelse (en undtagelse, der skal håndteres), som du ikke vil fange i din nuværende metode.

Java kaste nøgleord

Den throwsøgeord bruges til eksplicit at smide en enkelt undtagelse.

Når en undtagelse kastes, overføres strømmen af ​​programudførelse fra tryblokken til catchblokken. Vi bruger thrownøgleordet inden for en metode.

Dens syntaks er:

 throw throwableObject;

Et kastbart objekt er en forekomst af klasse Throwableeller underklasse af Throwableklassen.

Eksempel 2: Java-nøgleord

 class Main ( public static void divideByZero() ( throw new ArithmeticException("Trying to divide by 0"); ) public static void main(String() args) ( divideByZero(); ) ) 

Produktion

 Undtagelse i tråden "main" java.lang.ArithmeticException: Forsøger at dele med 0 ved Main.divideByZero (Main.java:3) ved Main.main (Main.java:7) exit status 1 

I dette eksempel kaster vi eksplicit en ArithmeticException.

Bemærk: ArithmeticException er en ikke-markeret undtagelse. Det er normalt ikke nødvendigt at håndtere ukontrollerede undtagelser.

Eksempel 3: Kaste markeret undtagelse

 import java.io.*; class Main ( public static void findFile() throws IOException ( throw new IOException("File not found"); ) public static void main(String() args) ( try ( findFile(); System.out.println("Rest of code in try block"); ) catch (IOException e) ( System.out.println(e.getMessage()); ) ) ) 

Produktion

 Fil ikke fundet 

Den findFile()metode kaster en IOExceptionmed det budskab, vi passerede på sin konstruktør.

Bemærk, at da det er en markeret undtagelse, skal vi specificere det i throwsklausulen.

Metoderne, der kalder denne findFile()metode, skal enten håndtere denne undtagelse eller specificere den ved hjælp af throwsnøgleordet selv.

Vi har håndteret denne undtagelse i main()metoden. Flowet af programudførelse overføres fra tryblokken til catchblokken, når en undtagelse kastes. Så tryspringes resten af ​​koden i blokken over, og udsagn i catchblokken udføres.

Interessante artikler...