Gestion des erreurs en Java : try/catch et bien plus — guide complet

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Gestion des erreurs en Java : try/catch et bien plus : de A à Z



La gestion des erreurs est l'un des concepts clés en Java que tout développeur doit maîtriser. Contrairement à de nombreux langages, Java offre un système d'exceptions (exceptions) strict et bien pensé, qui permet d'écrire un code fiable et prévisible. Dans cet article, nous allons tout détailler : du try/catch de base aux mécanismes avancés comme try-with-resources et les exceptions personnalisées.



1. Les bases : que sont les exceptions et la hiérarchie des classes



Une exception est un événement qui perturbe le déroulement normal d'un programme. En Java, toutes les exceptions sont des objets de classes héritant de Throwable. Les principales branches de la hiérarchie sont :



  • Error — des problèmes critiques qui ne sont généralement pas traités (par exemple, OutOfMemoryError).
  • Exception — des exceptions que le programme peut traiter.
  • RuntimeException (sous-classe d'Exception) — des exceptions d'exécution qui ne sont pas nécessairement vérifiées à la compilation.


Toutes les exceptions sont divisées en deux types :

  • Checked (vérifiées) — obligatoires à traiter. Le compilateur ne compilera pas le code si vous ne les gérez pas avec try/catch ou ne les déclarez pas avec throws. Exemples : IOException, SQLException.
  • Unchecked (non vérifiées) — héritent de RuntimeException. Elles ne nécessitent pas de traitement explicite. Exemples : NullPointerException, ArithmeticException.


2. Le mécanisme de base : try, catch, finally



Le bloc de base pour la gestion des exceptions se compose de trois parties :



try {    // Code qui peut lever une exception    int result = 10 / 0;} catch (ArithmeticException e) {    // Gestion de l'exception    System.err.println("Erreur : division par zéro !");} finally {    // Ce bloc s'exécute toujours (même en cas d'exception)    System.out.println("Bloc finally exécuté.");}


Points importants :

  • Le bloc catch peut être unique ou multiple pour différents types d'exceptions.
  • Le bloc finally est facultatif, mais utile pour fermer les ressources (fichiers, connexions).
  • Si l'exception n'est pas interceptée, elle remonte la pile d'appels.


Multi-catch (Java 7+) — permet d'intercepter plusieurs types d'exceptions dans un seul bloc :



try {    // code} catch (IOException | SQLException e) {    System.err.println("Erreur d'entrée-sortie ou SQL : " + e.getMessage());}


3. Try-with-resources : fermeture automatique des ressources



Depuis Java 7, un mécanisme try-with-resources a été introduit, qui ferme automatiquement les ressources implémentant l'interface AutoCloseable (ou Closeable). Cela évite d'avoir à écrire un bloc finally pour fermer les fichiers, sockets, etc.



try (BufferedReader reader = new BufferedReader(new FileReader("file.txt"))) {    String line = reader.readLine();    System.out.println(line);} catch (IOException e) {    System.err.println("Erreur de lecture du fichier : " + e.getMessage());} // reader est fermé automatiquement


Avantages :

  • Le code devient plus propre et plus court.
  • Les ressources sont fermées dans le bon ordre (ordre inverse de leur création).
  • Si une exception est levée à la fois dans le bloc try et lors de la fermeture, l'exception supprimée (suppressed) est ajoutée à l'exception principale.


Vous pouvez déclarer plusieurs ressources séparées par un point-virgule :



try (BufferedReader br = new BufferedReader(new FileReader("in.txt"));     BufferedWriter bw = new BufferedWriter(new FileWriter("out.txt"))) {    // code} catch (IOException e) {    System.err.println("Erreur : " + e.getMessage());}

Blogs

Book Recommendations