je suis en train de lire un tuto sur le langage java , et je suis arrivé sur la partie concernant les exceptions , et cela me fatigue un peu depuis un bout de temps ,
j'avais l'habitude de gérer les exceptions lorsque je développais en vb , et j'utilisais très couramment la syntaxe :
Try
Catch ex As Exception
End Try
sans me soucier du nom de l'exception qui pourrait être générée
mais une fois en java , j'ai lu que lorsqu'on utilise cette syntaxe , l'on doit préciser le type d'exception , mais j'ai une question , j'aimerais savoir s'il n'existe pas une méthode pour connaitre le nom de l'exception qui sera générée automatiquement , car j'ai lu que en envoyant au catch le type d'exception , ( parfois une exception arithmétique , et d'autres cas , c'est des exeptions sur les entrées et sorties , bref , je veux gerer les exceptions , mais comment faire pour savoir quel nom je dois envoyer en paramètre dans mon " catch"
enfin , j'ai aussi vu que l'on pouvait gérer les exeptions en utilisant les syntaxes , " finally " ou encore " throws " mais je ne sais pas , quand est ce que l'on utilise le throws et quand est ce que l'on utilise le finally , pourriez vous m'éclairer
Commençons par le finally, il permet d'exécuter un morceau de code qu'il y ait eu exception ou non.
try
{
// instructions qui peuvent poser problème
}
catch (Throwable t)
{
// instruction à effectuer si problème
}
finally
{
// instructions à effectuer qu'il y ait problème ou non
}
Personnellement, je ne m'en suis jamais servi, je préfère faire comme ça :
try
{
// instructions qui peuvent poser problème
}
catch (Throwable t)
{
// instruction à effectuer si problème
}
// instructions à effectuer qu'il y ait problème ou non
Ensuite, il faut savoir que le traitement des exceptions est obligatoire en Java.
Le throws permet d'indiquer qu'on n'a pas géré une exception dans la méthode, et qu'il faudra la gérer dans la méthode qui l'appelle.
Exemple, si la méthode m1 peut générer une Exception, on pourra faire :
Si tu comprend le principe des throws il est plus facile de comprendre comment savoir quel type d'exception il faut gérer : il faut gérer dans un try catch, les exceptions qui apparaissent avec des "throws" dans les méthodes (ce qui est indiqué dans leur documentation)
Avec mon exemple du dessus, m1 génère une Exception donc je dois faire un try/catch ou un throws sur la classe Exception à chaque fois que j'utilise m1.
Un point important à comprendre, c'est que les exceptions héritent les unes des autres. Tu auras une hiérarchie comme ceci :
Lorsque tu traites une IOException par exemple, tu peux donc la traiter directement, ou alors traiter sa classe mère (Exception) ou bien encore la classe mère au dessus (Throwable, qui gère aussi les Error)
À noter : la classe RuntimeException et ses classes filles sont un peu particulières car les exceptions qu'elles génèrent peuvent ne pas être traitées dans le code. Ce sont les seules qui auront des throws mais pour lesquels tu pourras ne pas mettre de try/catch (dans les RuntimeException on retrouve notamment les NullPointerException, ArrayOutOfBoundsException, etc.)