"Ah. Te voilà. Je te cherchais."

"Quelque chose est arrivé?"

« Non, mais nous étudions toujours.

"D'accord. Je t'écoute."

"Je veux vous dire encore quelques choses sur les exceptions :"

"Dans Java 7, la construction try-catch a été légèrement étendue grâce à l'ajout de plusieurs blocs catch. Regardez cet exemple :"

Java 5
try
{
  …
}
 catch (IOException ex)
{
 logger.log(ex);
 throw ex;
}
 catch (SQLException ex)
{
 logger.log(ex);
 throw ex;
}
Java 7
try
{
  …
}
 catch (IOException | SQLException ex)
{
 logger.log(ex);
 throw ex;
}

"Alors pouvons-nous maintenant écrire plusieurs exceptions séparées par des opérateurs OU ('|' est un OU binaire) ?"

"C'est vrai. N'est-ce pas pratique ?"

"Hmm. Mais quel sera le type de l'objet exception à l'intérieur du bloc catch ?"

"Après tout, une IOException a ses méthodes et une SQLException a ses méthodes."

"Le type d'exception sera celui de leur classe ancêtre commune."

"Ah. En d'autres termes, ce sera très probablement Exeption ou RuntimeException . Alors pourquoi ne pas simplement écrire catch(Exception e)?"

"Parfois, lors de la gestion des erreurs individuellement, il est pratique de les regrouper, d'écrire certaines erreurs dans un journal, d'en supprimer d'autres et de les gérer d'une autre manière."

"En d'autres termes, ce schéma est reconnu comme résolvant le problème des blocs catch en double pour gérer différentes erreurs."

"Ah. J'ai compris. Merci, Ellie."

"Ce n'est pas tout. Je veux vous en dire un peu plus sur le bloc finally ."

"Comme vous le savez probablement déjà, ce bloc est toujours exécuté."

"Et quand je dis toujours, je veux dire absolument toujours ."

"Par exemple:"

Exemple utilisant enfin
try
{
 return 1;
}
 finally
{
 return 0;
}

"Ici, il y a un retour dans le bloc try et un retour dans le bloc finally . La valeur de retour de cette méthode sera donc le nombre 0."

"Le bloc finally s'exécutera quoi qu'il arrive. Et son instruction de retour écrase l'autre valeur de retour avec sa propre valeur."

"Je vois."

« Cependant, une méthode peut soit renvoyer une valeur, soit lever une exception. »

"Donc, si une valeur est renvoyée dans un bloc try, mais que le bloc finally lève une exception , alors le résultat sera une exception . "

"Que se passe-t-il si une exception est levée dans le bloc try mais que le bloc finally a une instruction return ?"

"Ensuite, c'est comme si la méthode fonctionnait correctement et que la valeur de l'instruction de retour était renvoyée.

Exemple Résultat
try
{
 return 1;
}
 finally
{
 return 0;
}
0
try
{
 return 1;
}
 finally
{
 throw new RuntimeException();
}
Exception d'exécution
try
{
 throw new RuntimeException();
}
 finally
{
 return 0;
}
0
try
{
 throw new RuntimeException();
}
 finally
{
 throw new IOException();
}
IOException

"La seule raison pour laquelle la méthode finally pourrait ne pas être exécutée serait la fin immédiate du programme par un appel à la méthode System.exit() ;."

Exemple
try
{
 System.exit(0);
 return 1;
}
 finally
{
 return 0;
}

"Je vois."

"Gardez à l'esprit que tous ces sujets sont généralement abordés dans les entretiens, il serait donc bon que vous les compreniez et que vous vous en souveniez."