Mot-clé Java throw and throws

Dans ce tutoriel, nous allons apprendre à utiliser le mot clé throw and throws pour la gestion des exceptions à l'aide d'exemples.

En Java, les exceptions peuvent être classées en deux types:

  • Exceptions non vérifiées: Ils ne sont pas vérifiées à la compilation mais par exemple la gestion time.For: ArithmeticException, NullPointerException, ArrayIndexOutOfBoundsException, exceptions sous Errorclasse, etc.
  • Exceptions vérifiées : elles sont vérifiées au moment de la compilation. Par exemple, IOException, InterruptedException, etc.

Reportez-vous à Exceptions Java pour en savoir plus sur les exceptions cochées et non cochées.

En général, nous n'avons pas besoin de gérer les exceptions non vérifiées. C'est parce que des exceptions non vérifiées se produisent en raison d'erreurs de programmation. Et c'est une bonne pratique de les corriger au lieu de les manipuler.

Ce didacticiel se concentrera maintenant sur la façon de gérer les exceptions vérifiées à l'aide de throwet throws.

Java jette un mot-clé

Nous utilisons le throwsmot - clé dans la déclaration de méthode pour déclarer le type d'exceptions qui pourraient s'y produire.

Sa syntaxe est:

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

Comme vous pouvez le voir dans la syntaxe ci-dessus, nous pouvons utiliser throwspour déclarer plusieurs exceptions.

Exemple 1: Java lance un mot-clé

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

Production

 java.io.FileNotFoundException: test.txt (aucun fichier ou répertoire de ce type) 

Lorsque nous exécutons ce programme, si le fichier test.txtn'existe pas, FileInputStreamlance un FileNotFoundExceptionqui étend la IOExceptionclasse.

Si une méthode ne gère pas d'exceptions, le type d'exceptions qui peuvent se produire dans celle-ci doit être spécifié dans la throwsclause afin que les méthodes situées plus haut dans la pile d'appels puissent les gérer ou les spécifier à l'aide de throwsmots-clés elles-mêmes.

La findFile()méthode spécifie qu'un IOExceptionpeut être levé. La main()méthode appelle cette méthode et gère l'exception si elle est levée.

Lancer plusieurs exceptions

Voici comment nous pouvons lever plusieurs exceptions à l'aide du throwsmot - clé.

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

Ici, la findFile()méthode précise qu'il peut jeter NullPointerException, IOExceptionet InvalidClassExceptiondans son throwsarticle.

Notez que nous n'avons pas géré le NullPointerException. C'est parce que c'est une exception non vérifiée. Il n'est pas nécessaire de le spécifier dans la throwsclause et de le gérer.

jette le mot-clé Vs. essayez… attrapez… enfin

Plusieurs méthodes peuvent provoquer des exceptions. L'écriture try… catchpour chaque méthode sera fastidieuse et le code devient long et moins lisible.

throws est également utile lorsque vous avez vérifié une exception (une exception qui doit être gérée) que vous ne souhaitez pas intercepter dans votre méthode actuelle.

Mot-clé Java throw

Le throwmot clé est utilisé pour lever explicitement une seule exception.

Lorsqu'une exception est levée, le flux d'exécution du programme est transféré du trybloc vers le catchbloc. Nous utilisons le throwmot - clé dans une méthode.

Sa syntaxe est:

 throw throwableObject;

Un objet jetable est une instance de classe Throwableou de sous-classe de la Throwableclasse.

Exemple 2: mot-clé Java throw

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

Production

 Exception dans le thread "main" java.lang.ArithmeticException: tentative de division par 0 à Main.divideByZero (Main.java:3) à l'état de sortie Main.main (Main.java:7) 1 

Dans cet exemple, nous lançons explicitement un ArithmeticException.

Remarque: ArithmeticException est une exception non cochée. Il n'est généralement pas nécessaire de gérer les exceptions non contrôlées.

Exemple 3: Lancer une exception vérifiée

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

Production

 Fichier introuvable 

La findFile()méthode lève un IOExceptionavec le message que nous avons passé à son constructeur.

Notez que puisqu'il s'agit d'une exception vérifiée, nous devons la spécifier dans la throwsclause.

Les méthodes qui appellent cette findFile()méthode doivent soit gérer cette exception, soit la spécifier à l'aide du throwsmot clé elles-mêmes.

Nous avons traité cette exception dans la main()méthode. Le flux d'exécution du programme est transféré du trybloc au catchbloc lorsqu'une exception est levée. Ainsi, le reste du code du trybloc est ignoré et les instructions du catchbloc sont exécutées.

Articles intéressants...