Java kaster og kaster Keyword

I denne opplæringen vil vi lære å bruke kaste og kaste nøkkelord for unntakshåndtering ved hjelp av eksempler.

I Java kan unntak kategoriseres i to typer:

  • Ukontrollert Unntak: De er ikke kontrollert ved kompilering-tiden, men på kjøre time.For eksempel: ArithmeticException, NullPointerException, ArrayIndexOutOfBoundsException, unntak i henhold Errorklasse, etc.
  • Sjekket unntak: De sjekkes ved kompileringstid. For eksempel IOException, InterruptedExceptionetc.

Se Java-unntak for å lære mer om avmerkede og ukontrollerte unntak.

Vanligvis trenger vi ikke å håndtere ukontrollerte unntak. Det er fordi unchecked unntak oppstår på grunn av programmeringsfeil. Og det er god praksis å rette dem i stedet for å håndtere dem.

Denne opplæringen vil nå fokusere på hvordan du håndterer sjekket unntak ved hjelp av throwog throws.

Java kaster nøkkelord

Vi bruker throwsnøkkelordet i metodedeklarasjonen for å erklære hvilken type unntak som kan forekomme i det.

Dens syntaks er:

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

Som du kan se fra ovenstående syntaks, kan vi bruke throwstil å erklære flere unntak.

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); ) ) ) 

Produksjon

 java.io.FileNotFoundException: test.txt (Ingen slik fil eller katalog) 

Hvis filen test.txtikke eksisterer, FileInputStreamkaster vi et FileNotFoundExceptionsom utvider IOExceptionklassen når vi kjører dette programmet .

Hvis en metode ikke håndterer unntak, må typen unntak som kan forekomme innenfor den spesifiseres i throwsparagrafen, slik at metoder lenger opp i samtalestakken kan håndtere dem eller spesifisere dem ved hjelp av throwsnøkkelordet selv.

Den findFile()metode angir at en IOExceptionkan kastes. Den main()metoden kaller denne metoden, og håndterer unntak hvis det blir kastet.

Kaster flere unntak

Slik kan vi kaste flere unntak ved å bruke throwsnøkkelordet.

 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()angir metoden som det kan kaste NullPointerException, IOExceptionog InvalidClassExceptioni sin throwsklausul.

Merk at vi ikke har håndtert NullPointerException. Dette er fordi det er et ukontrollert unntak. Det er ikke nødvendig å spesifisere det i throwsparagrafen og håndtere det.

kaster nøkkelordet vs. prøv … fang … endelig

Det kan være flere metoder som kan forårsake unntak. Å skrive try… catchfor hver metode vil være kjedelig og koden blir lang og mindre lesbar.

throws er også nyttig når du har sjekket unntak (et unntak som må håndteres) som du ikke vil fange i din nåværende metode.

Java kaste nøkkelord

Den thrownøkkelordet brukes til å eksplisitt kaste et eneste unntak.

Når et unntak blir kastet, overføres strømmen av programgjennomføring fra tryblokken til catchblokken. Vi bruker thrownøkkelordet innenfor en metode.

Dens syntaks er:

 throw throwableObject;

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

Eksempel 2: Java-kasteord

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

Produksjon

 Unntak i tråden "main" java.lang.ArithmeticException: Prøver å dele med 0 ved Main.divideByZero (Main.java:3) ved Main.main (Main.java:7) exit status 1 

I dette eksemplet kaster vi eksplisitt en ArithmeticException.

Merk: ArithmeticException er et ukjent unntak. Det er vanligvis ikke nødvendig å håndtere ukontrollerte unntak.

Eksempel 3: Kaste avmerket unntak

 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()); ) ) ) 

Produksjon

 Fil ikke funnet 

Den findFile()metoden kaster en IOExceptionmed meldingen vi passerte sin konstruktør.

Merk at siden det er et avkrysset unntak, må vi spesifisere det i throwsklausulen.

Metodene som kaller denne findFile()metoden må enten håndtere dette unntaket eller spesifisere det ved hjelp av throwsnøkkelordet selv.

Vi har håndtert dette unntaket i main()metoden. Flyten av programkjøring overføres fra tryblokken til catchblokken når et unntak kastes. Så, resten av koden i tryblokken hoppes over og utsagn i catchblokken utføres.

Interessante artikler...