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 sousError
classe, 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 throw
et throws
.
Java jette un mot-clé
Nous utilisons le throws
mot - 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 throws
pour 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.txt
n'existe pas, FileInputStream
lance un FileNotFoundException
qui étend la IOException
classe.
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 throws
clause 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 throws
mots-clés elles-mêmes.
La findFile()
méthode spécifie qu'un IOException
peut ê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 throws
mot - 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
, IOException
et InvalidClassException
dans son throws
article.
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 throws
clause et de le gérer.
jette le mot-clé Vs. essayez… attrapez… enfin
Plusieurs méthodes peuvent provoquer des exceptions. L'écriture try… catch
pour 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 throw
mot 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 try
bloc vers le catch
bloc. Nous utilisons le throw
mot - clé dans une méthode.
Sa syntaxe est:
throw throwableObject;
Un objet jetable est une instance de classe Throwable
ou de sous-classe de la Throwable
classe.
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 IOException
avec 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 throws
clause.
Les méthodes qui appellent cette findFile()
méthode doivent soit gérer cette exception, soit la spécifier à l'aide du throws
mot 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 try
bloc au catch
bloc lorsqu'une exception est levée. Ainsi, le reste du code du try
bloc est ignoré et les instructions du catch
bloc sont exécutées.