Java gooit en gooit trefwoord

In deze zelfstudie leren we met behulp van voorbeelden het throw en throw-trefwoord te gebruiken voor het afhandelen van uitzonderingen.

In Java kunnen uitzonderingen worden onderverdeeld in twee typen:

  • Ongecontroleerde Uitzonderingen: Ze zijn niet gecontroleerd tijdens het compileren, maar op run-time.For voorbeeld: ArithmeticException, NullPointerException, ArrayIndexOutOfBoundsException, uitzonderingen onder Errorklasse, etc.
  • Gecontroleerde uitzonderingen: ze worden gecontroleerd tijdens het compileren. Bijvoorbeeld IOException, InterruptedExceptionetc.

Raadpleeg Java-uitzonderingen voor meer informatie over aangevinkte en niet-aangevinkte uitzonderingen.

Meestal hoeven we geen ongecontroleerde uitzonderingen af ​​te handelen. Het is omdat ongecontroleerde uitzonderingen optreden als gevolg van programmeerfouten. En het is een goede gewoonte om ze te corrigeren in plaats van ze af te handelen.

Deze tutorial zal zich nu concentreren op het omgaan met aangevinkte uitzonderingen met throwen throws.

Java gooit trefwoord

We gebruiken het throwssleutelwoord in de methode-declaratie om het type uitzonderingen aan te geven dat erin kan voorkomen.

De syntaxis is:

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

Zoals u kunt zien aan de hand van de bovenstaande syntaxis, kunnen we gebruiken throwsom meerdere uitzonderingen te declareren.

Voorbeeld 1: Java gooit trefwoord

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

Uitvoer

 java.io.FileNotFoundException: test.txt (bestand of map bestaat niet) 

Als we dit programma draaien, en als het bestand test.txtniet bestaat, FileInputStreamgooit het een FileNotFoundExceptiondie de IOExceptionklasse uitbreidt .

Als een methode geen uitzonderingen afhandelt, moet het type uitzonderingen dat erin kan voorkomen in de throwsclausule worden gespecificeerd , zodat methoden verderop in de aanroepstapel ze kunnen afhandelen of ze kunnen specificeren met behulp van het throwstrefwoord zelf.

De findFile()methode specificeert dat een IOExceptionkan worden gegooid. De main()methode roept deze methode aan en behandelt de uitzondering als deze wordt gegenereerd.

Meerdere uitzonderingen gooien

Hier is hoe we meerdere uitzonderingen kunnen genereren met behulp van het throwstrefwoord.

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

Hier, de findFile()methode vermeld dat het kan gooien NullPointerException, IOExceptionen InvalidClassExceptionin zijn throwsartikel.

Merk op dat we het NullPointerException. Dit komt omdat het een ongecontroleerde uitzondering is. Het is niet nodig om het in de throwsclausule te specificeren en af ​​te handelen.

gooit trefwoord Vs. probeer … vang … eindelijk

Er kunnen verschillende methoden zijn die uitzonderingen kunnen veroorzaken. Het schrijven try… catchvoor elke methode zal vervelend zijn en code wordt lang en minder leesbaar.

throws is ook handig als u een uitzondering heeft aangevinkt (een uitzondering die moet worden afgehandeld) die u niet wilt opvangen in uw huidige methode.

Java throw-trefwoord

Het throwsleutelwoord wordt gebruikt om expliciet een enkele uitzondering te genereren.

Wanneer er een uitzondering wordt gegenereerd, wordt de stroom van programma-uitvoering overgedragen van het tryblok naar het catchblok. We gebruiken het throwtrefwoord binnen een methode.

De syntaxis is:

 throw throwableObject;

Een werpbaar object is een instantie van een klasse Throwableof subklasse van de Throwableklasse.

Voorbeeld 2: Java-throw-trefwoord

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

Uitvoer

 Uitzondering in thread "main" java.lang.ArithmeticException: Proberen te delen door 0 bij Main.divideByZero (Main.java:3) bij Main.main (Main.java:7) exit status 1 

In dit voorbeeld gooien we expliciet een ArithmeticException.

Opmerking: dit ArithmeticException is een ongecontroleerde uitzondering. Het is meestal niet nodig om ongecontroleerde uitzonderingen af ​​te handelen.

Voorbeeld 3: Uitzondering aangevinkt

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

Uitvoer

 Bestand niet gevonden 

De findFile()methode gooit een IOExceptionmet het bericht dat we aan de constructor hebben doorgegeven.

Merk op dat aangezien het een aangevinkte uitzondering is, we deze in de throwsclausule moeten specificeren .

De methoden die deze findFile()methode aanroepen, moeten deze uitzondering afhandelen of deze throwszelf specificeren met behulp van een trefwoord.

We hebben deze uitzondering in de main()methode afgehandeld . De stroom van programma-uitvoering wordt overgebracht van het tryblok naar het catchblok wanneer er een uitzondering wordt gegenereerd. De rest van de code in het tryblok wordt dus overgeslagen en instructies in het catchblok worden uitgevoerd.

Interessante artikelen...