14 06 Gestion de plusieurs exceptions

Dans cette vidéo, nous allons lever manuellement une exception personnalisée depuis le constructeur d'une classe. L'objectif : refuser la création d'un objet Voiture si le nombre de kilomètres saisi est négatif, en propageant une NonVoitureException bien explicite.

Lever l'exception dans le constructeur

Le principe est simple : dans le constructeur de Voiture, on ajoute une condition. Si elle est vérifiée (kilométrage négatif), on lève une exception du type NonVoitureException. Pour cela, deux mots-clés sont à connaître :

  • throws : il s'ajoute à la signature de la méthode ou du constructeur pour signaler à la JVM que ce code est potentiellement dangereux et doit être appelé dans un bloc try/catch. Il est suivi du nom de la classe d'exception concernée.
  • throw : il permet de lever manuellement l'exception, en instanciant un nouvel objet du type voulu via throw new NonVoitureException(...).

Ainsi, l'exception personnalisée capturera bien notre logique métier (« ce kilométrage n'est pas valide pour une voiture ») et sera traitée comme un objet de la classe NonVoitureException par les blocs catch qui l'attendent.

Une fois cette modification appliquée au constructeur, écrivons un test côté main :

Voiture v = new Voiture("J'ai trop envie", "Marque X", -100);

L'IDE signale immédiatement une erreur : depuis le changement du constructeur, toute instanciation doit gérer les exceptions susceptibles d'être levées. On enveloppe donc l'appel dans un bloc try/catch. Au passage, attention au type de la variable de kilométrage : déclarée en int, elle ne doit pas être confondue avec un String côté constructeur — un cast ou une signature cohérente est nécessaire.

Dès que ces ajustements sont faits, l'erreur disparaît, le code compile et s'exécute. Le constructeur protège désormais notre modèle métier contre les saisies invalides, en levant proprement une exception dédiée. À très vite dans la prochaine vidéo.