Lever et personnaliser des exceptions en Java

Lors du développement Java, la gestion des erreurs repose sur un mécanisme de'xceptions robuste. Lorsqu'une opération peut échouer de manière prévisible, il est courant de lever explicitement une exception pour signaler le problème au code appelant.


public class Calculatrice {
    public static void main(String[] args) {
        try {
            effectuerDivision(10, 0);
        } catch (ArithmeticException exc) {
            System.err.println("Erreur arithmétique interceptée : " + exc.getMessage());
        }
    }

    public static void effectuerDivision(int dividende, int diviseur) {
        if (diviseur == 0) {
            throw new ArithmeticException("Division par zéro non autorisée.");
        }
        System.out.println("Résultat : " + (dividende / diviseur));
    }
}

Dans l'exemple ci-dessus, la méthode effectuerDivision vérifie une condition d'erreur et, si elle est remplie, utilise l'instruction throw pour propager une exception de type ArithmeticException. Le bloc try-catch dans la méthode main permet d'intercepter et de traiter cette exception de manière contrôlée.

Pour des scénarios d'erreur métier spécifiques, il est souvent nécessaire de définir ses propres classes d'exception. Une exception personnnalisée étend généralement la classe Exception (pour les exceptions vérifiées) ou RuntimeException (pour les exceptions non vérifiées).


// Définition d'une exception personnalisée
public class ValeurHorsLimitesException extends Exception {
    private final int valeur;

    public ValeurHorsLimitesException(String message, int valeur) {
        super(message);
        this.valeur = valeur;
    }

    public int getValeur() {
        return valeur;
    }
}

// Utilisation de l'exception personnalisée
public class ValidateurDonnees {
    public static void validerPlage(int valeur) throws ValeurHorsLimitesException {
        if (valeur < 0 || valeur > 100) {
            throw new ValeurHorsLimitesException(
                "La valeur doit être comprise entre 0 et 100.", valeur
            );
        }
        System.out.println("Valeur valide : " + valeur);
    }

    public static void main(String[] args) {
        try {
            validerPlage(150);
        } catch (ValeurHorsLimitesException e) {
            System.err.println("Validation échouée : " + e.getMessage());
            System.err.println("Valeur reçue incorrecte : " + e.getValeur());
        }
    }
}

Lors de la conception d'une gestion d'exceptions efficace, plusieurs principes doivent guider le développement :

  • Anticiper les situations d'erreur courantes par une logique de validation plutôt que de se reposer uniquement sur les try-catch.
  • Ordonner les blocs catch du type le plus spécifique au plus général pour éviter les blocs inaccessibles.
  • Toujours viser à récupérer proprement d'une exception, en évitant de simplement l'afficher avec printStackTrace() dans un contexte de production.
  • Utiliser le bloc finally pour libérer systématiquement les ressources critiques (connexions, flux d'entrée/sortie, verrous, etc.).

Étiquettes: Java Exception Try-Catch Exception Personnalisée Gestion des Erreurs

Publié le 31 mai à 11h02