ProgrammationDéveloppeur Backend Java

Qu'est-ce que les exceptions (exceptions) en Java ? Expliquez la différence entre les checked et les unchecked exceptions et quand utiliser chaque catégorie.

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse

Les exceptions (exceptions) sont un mécanisme de gestion des erreurs en Java. Chaque objet lancé est une classe dérivée de Throwable. Il existe deux catégories principales :

  • Checked exceptions (descendants de Exception, sauf RuntimeException) : doivent être explicitement gérées ou déclarées dans la signature de la méthode via throws.
  • Unchecked exceptions (descendants de RuntimeException) : il n'est pas nécessaire de les gérer explicitement, elles peuvent survenir à tout endroit (par exemple, NullPointerException).

Quand utiliser ?

  • Checked — pour des erreurs prévisibles qui peuvent être gérées (par exemple, fichiers, erreurs réseau).
  • Unchecked — pour des erreurs indiquant des défauts de programme (par exemple, index de tableau incorrect).
Exemple de code
public void readFile(String path) throws IOException { // Checked exception — nécessite un traitement Files.readAllLines(Paths.get(path)); } public void divide(int a, int b) { int c = a / b; // Unchecked — ArithmeticException }

Question piège

Un méthode ne déclarant pas throws peut-elle lancer une checked exception ?

Réponse : Non, le compilateur n'autorise pas à lancer une checked exception sans déclaration dans la signature de la méthode (throws). Mais une unchecked exception peut être lancée sans avertissement.

void foo() { throw new IOException(); // Erreur de compilation }

Exemples d'erreurs réelles dues à l'ignorance des subtilités du sujet


Histoire

Dans une banque en ligne, le client a décidé d'ignorer le traitement des SQLExceptions, utilisant des wrappers unchecked. Cela a conduit à des erreurs invisibles lors de la mise à jour du driver, provoquant une désynchronisation des données.


Histoire

Dans une application de journalisation, le fichier de log restait verrouillé en raison d'une checked exception non gérée (FileNotFoundException), qui a été "perdue" dans la chaîne d'appels, l'erreur n'a pas été traitée à temps, et l'application ne pouvait plus écrire dans les logs.


Histoire

Dans une plateforme de trading, l'équipe a mis en œuvre un catch global(Throwable) pour "ne jamais tomber". En fin de compte, des exceptions unchecked critiques étaient masquées — l'application continuait à fonctionner dans un état incohérent, entraînant des bogues complexes et des pertes de données.