1. throwopérateur

Lorsqu'une exception est interceptée par un catchbloc, et jusqu'à ce qu'elle soit lancée sur la machine Java, c'est juste un objet qui hérite Exception(ou plutôt, Throwable). L'objet exception lui-même n'a aucune propriété magique.

Toute la logique du fonctionnement des exceptions n'est qu'une façon particulière dont la machine Java se comporte lorsqu'une exception lui est levée.

Vous pouvez toujours renvoyer une exception interceptée à la machine Java. Pour ce faire, vous devez utiliser l' throwopérateur :

throw exception;

Exemple:

Code Sortie console
try
{
   int d = 2/0;
}
catch(Exception except)
{
   System.out.println("Caught the exception");
   throw except;
}
Caught the exception

Dans ce code, nous avons intercepté une exception, affiché un message à ce sujet à l'écran, puis l'avons renvoyée.

Une exception renvoyée ne peut pas être interceptée par d'autres catchblocs du même trybloc.


2. Vos dérogations

Au fait, vous pouvez créer vous-même un objet d'exception : il s'agit simplement d'un objet dont le type est Exceptionou d'une classe qui en hérite. Et jetez-le.

C'est plus facile qu'il n'y paraît. Exemple:

Code Sortie console
try
{
   throw new RuntimeException();
}
catch(Exception except)
{
   System.out.println("Caught the exception");
   throw except;
}
Caught the exception

Dans l'exemple ci-dessus, nous avons créé un nouvel objet d'exception dont le type est RuntimeExceptionet l'avons immédiatement lancé à l'aide de l' throwopérateur.

Il sera immédiatement intercepté par le catchbloc, car RuntimeException hérite de Exception. Le catch (Exception except)code intercepte les objets d'exception de toutes les classes qui héritent de la Exceptionclasse.



3. finallymot clé

Autre point important. Parfois, un programmeur doit effectuer une action, qu'une exception se soit produite ou non dans le code. Par exemple, supposons que nous ouvrions un fichier en écriture. Le fichier ouvert doit être fermé en appelant close().

try
{
   // Code where an exception might occur
}
catch(ExceptionType name)
{
   // Exception handling code
}
finally
{
   // Code that must executed no matter what happens
}

Pour effectuer ces actions obligatoires, un autre type de bloc ( finally) a été ajouté à la try-catchconstruction, créant ainsi la try-catch-finallyconstruction. Il ressemble à ceci :

Exemple:

FileInputStream source = null;
try
{
   source = new FileInputStream("c:\\note.txt");
   source.read();
}
catch(Exception except)
{
   System.out.println("Caught the exception");
   throw except;
}
finally
{
   if (source != null)
      source.close();
}

Le code du finallybloc s'exécutera dans tous les cas, qu'il y ait ou non une exception. Même si une exception est levée et non interceptée, le finallybloc s'exécutera toujours.

Au fait, si vous ne voulez pas intercepter une exception, mais que vous avez besoin d'un finallybloc, utilisez la notation abrégée pour la try-catch-finallyconstruction : un try-finallybloc. Cela ressemble à ceci :

try
{
   // Code where an exception might occur
}
finally
{
   // Code that must executed no matter what happens
}