Créer sa classe exception

Fermé
aya - 18 nov. 2012 à 05:35
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 21 nov. 2012 à 14:39
Bonjour,
Je souhaiterai créer ma propre classe pour une exception n'existant pas mais je suis un peu perdu, c'est la première fois que je crée ce type de classe et je ne sais pas trop quoi mettre dedans.
Pour simplifier mon problème actuel

J'ai dans une classe une méthode dans laquelle j'ai une boucle qui calcule quelquechose. J'ai déjà mis un try-catch pour les arithmetic exception mais je voudrais ajouter un autre type d'exception que je crée moi même mais je ne comprends pas trop ni ce que je dois mettre dans cette classe exception, ni ce que je dois mettre dans ma méthode.

J'ai volontairement évité de ne pas rentrer dans les détails de mon code car c'est vraiment l'idée de créer cette classe Myexception et de l'utiliser que je n'arrive pas trop à aborder et je n'ai pas trouvé de trucs vraiment satisfaisant sur le net.
Pouvez-vous m'aider ?
Merci d'avance,
Cordialement.
A voir également:

2 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
18 nov. 2012 à 13:38
C'est assez simple, tu as juste à hériter d'une classe Exception :
public MyException extends Exception
Cependant, Exception c'est très général, si tu considère que ton exception est plutôt du genre ArithmeticException alors tu devrais faire une déclaration dans ce sens :
public MyException extends ArithmeticException
Après tu as aussi la possibilité de redéfinir les méthodes de la classe héritée pour les adapter à tes besoins (rajouter des informations par exemple)

public MyException extends ArithmeticException
{
    public MyException(MyObject object)
    {
        super("MyObject "+object+" not valid");
    }
}

Au niveau de l'utilisation, cela se fait comme avec n'importe quelle autre exception, throws, throw, try/catch.

public void myMethod(MyObject object) throws MyException
{
    if (invalid(object))
        throw new MyException(object);    
}

public void action(MyObject object)
{
    try
    {
        myMethod(object);
    }
    catch (MyException e)
    {
        System.err.println(e); // "MyObject "+object+" not valid"
    }
}

Remarque : avec ArithmeticException et toutes les RuntimeException en général, il n'est pas nécessaire de traiter systématiquement les exceptions, il est donc possible de les laisser se propager jusqu'au main (comme les NullPointerException par exemple)
0
d'accord, j'ai bien compris comment utiliser la classe MyException (catch/try) mais ce que je ne comprends pas du tout c'est qu'est-ce que je dois écrire dans ma classe MyException (mis à part le constructeur..) : j'ai fait un tour sur la doc et je n'ai pas compris qu'elle méthode je devais modifier pour faire ce que je veux faire.
En fait je dois créer une classe pour une exception spécifique :
-si j'ai une variable de type int et que j'essaie de lui attribuer une valeur de type String
-si j'ai une variable de type String et que j'essaie de lui attribuer une valeur de type int

Pouvez-vous m'aider ?
merci d'avance
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
21 nov. 2012 à 14:39
En général il n'y a que le constructeur à modifier, mais tu ne peux utiliser l'exception que sur des méthodes que tu contrôles à l'exécution. Dans le cas qui t'intéresse, attribuer une valeur de type String à un int, ou l'inverse, c'est une erreur de compilation, donc les exceptions ne servent à rien...

Éventuellement tu peux avoir ça :

private int n;

public void setN(Object o) throws MyException
{
    if (o instanceof Integer)
        n = (int) o;
    else
    	throw new MyException();
}

try
{
    Object o = "toto";
    setN(o);
}
catch (MyException e)
{
    System.err.println(e);
}

Mais tu pourrais directement faire comme ça et laisser les exceptions qui existent déjà faire leur travail, ton exception personnelle ne sert à rien.

try
{
    Object o = "toto";
    n = (int) o;
}
catch (ClassCastException e)
{
    System.err.println(e);
}
0