Java kasta och kastar nyckelord

I den här handledningen lär vi oss att använda kasta och kasta nyckelord för undantagshantering med hjälp av exempel.

I Java kan undantag delas in i två typer:

  • Okontrollerade Undantag: De är inte kontrolleras vid kompileringen tid men run-tid.Mer exempel: ArithmeticException, NullPointerException, ArrayIndexOutOfBoundsException, undantag enligt Errorklass, etc.
  • Kontrollerade undantag: De kontrolleras vid sammanställningstid. Till exempel IOException,, InterruptedExceptionetc.

Se Java-undantag för att lära dig mer i detalj om markerade och okontrollerade undantag.

Vanligtvis behöver vi inte hantera okontrollerade undantag. Det beror på att okontrollerade undantag uppstår på grund av programmeringsfel. Och det är bra att korrigera dem istället för att hantera dem.

Denna handledning kommer nu att fokusera på hur man hanterar kontrollerade undantag med throwoch throws.

Java kastar nyckelord

Vi använder throwsnyckelordet i metoddeklarationen för att deklarera vilken typ av undantag som kan förekomma inom det.

Dess syntax är:

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

Som du kan se från ovanstående syntax kan vi använda för throwsatt förklara flera undantag.

Exempel 1: Java kastar nyckelord

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

När vi kör det här programmet, om filen test.txtinte finns, FileInputStreamkastar en FileNotFoundExceptionsom utökar IOExceptionklassen.

Om en metod inte hanterar undantag måste typen av undantag som kan förekomma inom den specificeras i throwsparagrafen så att metoder längre upp i samtalsstacken kan hantera dem eller specificera dem med hjälp av throwsnyckelordet själva.

Den findFile()metod anger att en IOExceptionkan kastas. Den main()metodanrop denna metod och hanterar undantag om det kastas.

Kasta flera undantag

Så här kan vi kasta flera undantag med hjälp av throwsnyckelordet.

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

Här findFile()anger metoden att det kan kasta NullPointerException, IOExceptionoch InvalidClassExceptioni dess throwsklausul.

Observera att vi inte har hanterat NullPointerException. Detta beror på att det är ett okontrollerat undantag. Det är inte nödvändigt att specificera det i throwsklausulen och hantera det.

kastar nyckelord Vs. försök … fånga … äntligen

Det kan finnas flera metoder som kan orsaka undantag. Att skriva try… catchför varje metod blir tråkigt och koden blir lång och mindre läsbar.

throws är också användbart när du har markerat undantag (ett undantag som måste hanteras) som du inte vill fånga i din nuvarande metod.

Sökord för Java-kast

Det thrownyckelordet används för att explicit kasta ett enda undantag.

När ett undantag kastas överförs flödet av programkörning från tryblocket till catchblocket. Vi använder thrownyckelordet inom en metod.

Dess syntax är:

 throw throwableObject;

Ett kastbart objekt är en förekomst av klass Throwableeller underklass av Throwableklassen.

Exempel 2: Java-sökord

 class Main ( public static void divideByZero() ( 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:3) vid Main.main (Main.java:7) exit status 1 

I det här exemplet kastar vi uttryckligen en ArithmeticException.

Obs: ArithmeticException är ett okontrollerat undantag. Det är vanligtvis inte nödvändigt att hantera okontrollerade undantag.

Exempel 3: Kasta kontrollerat undantag

 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

 Filen hittades inte 

Den findFile()metod kastar ett IOExceptionmed det budskap vi vidare till dess konstruktör.

Observera att eftersom det är ett markerat undantag måste vi specificera det i throwsklausulen.

Metoderna som kallar den här findFile()metoden måste antingen hantera detta undantag eller ange det med hjälp av throwssökordet själva.

Vi har hanterat detta undantag i main()metoden. Flödet av programkörning överförs från tryblock till catchblock när ett undantag kastas. Så, resten av koden i tryblocket hoppas över och uttalanden i catchblocket körs.

Intressanta artiklar...