Try / catch / finally
try { int litres = Integer.parseInt(saisie); // peut échouer System.out.println(litres); } catch (NumberFormatException e) { System.out.println("Saisie invalide : " + e.getMessage()); } finally { System.out.println("Toujours exécuté"); // nettoyage }
Checked vs unchecked — les exceptions « checked » (ex.
IOException) doivent être déclarées (throws) ou attrapées ; les « unchecked » (RuntimeException) non.throw et exception métier
public class CampagneClotureeException extends RuntimeException { public CampagneClotureeException(String m) { super(m); } } void inscrire(Campagne c, int litres) { if (c.getStatut() != Statut.OUVERTE) throw new CampagneClotureeException("Campagne fermée"); ... }
Ne pas « avaler » les exceptions — un
catch vide masque les bugs. Journalisez (chapitre 20) ou relancez.🛢️ Sur le projet Fioul Groupé
La règle métier « on ne s'inscrit pas à une campagne clôturée » se traduit par une exception dédiée CampagneClotureeException. Côté API Spring, ces exceptions se transforment en réponses HTTP propres (400, 409) : la gestion d'erreurs Java est le socle de la robustesse de l'API fioul.
À retenir
- try/catch/finally traite les erreurs sans planter le programme.
- Checked (à déclarer) vs unchecked (RuntimeException).
- throw lève une exception ; on peut créer ses exceptions métier.
- Ne jamais avaler une exception en silence.