Aide sur la gestion des exeptions en java [Fermé]

Signaler
Messages postés
294
Date d'inscription
jeudi 3 janvier 2013
Statut
Membre
Dernière intervention
19 novembre 2013
-
glennog
Messages postés
294
Date d'inscription
jeudi 3 janvier 2013
Statut
Membre
Dernière intervention
19 novembre 2013
-
Bonjour,

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

2 réponses

Messages postés
16100
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
7 janvier 2020
2496
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 :

void m2()
{
    try
    {
         m1();
    }
    catch (Exception e)
    {
         // traitement de l'exception
    }
}

void m3()
{
    m2();
}

Ou alors faire :
void m2() throws Exception
{
    m1();
}

void m3()
{
    try
    {
         m2();
    }
    catch (Exception e)
    {
         // traitement de l'exception
    }
}

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 :

Object
    Throwable
        Error
            AWTError
            IOError
            ...
        Exception
            IOException
            RuntimeException
            ...

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.)
Messages postés
294
Date d'inscription
jeudi 3 janvier 2013
Statut
Membre
Dernière intervention
19 novembre 2013
3
merci beaucoup pour ton post , je comprends mieux maintenant , je t'en suis reconnaisant.
Bonne journée à toi l'ami