Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Java

Maîtriser la gestion d'exceptions Java : try, catch, finally et ressources

Maîtriser la gestion d'exceptions Java

Explorez comment les mécanismes try-catch-finally de Java et try-with-resources aident à écrire du code robuste et sans erreurs.

La construction try…catch est centrale pour la gestion gracieuse des erreurs en Java. Elle permet à un programme d'anticiper les problèmes d'exécution et d'y répondre sans planter.

Voici la syntaxe canonique :

try { // code qui peut lancer une exception } catch (ExceptionType e) { // gérer l'exception }

Le bloc try contient du code qui pourrait lancer une exception. Si une exception survient, le contrôle saute au bloc catch correspondant, qui peut alors réagir appropriément.

Exemple : Gestion d'une ArithmeticException

class Main { public static void main(String[] args) { try { int result = 5 / 0; System.out.println("This line is never reached."); } catch (ArithmeticException e) { System.out.println("Caught: " + e.getMessage()); } } }

Sortie

Caught: / by zero

Ici, la division par zéro déclenche une ArithmeticException. Le bloc catch la capture, prévenant un crash du programme.

Astuce : Vous pouvez omettre le bloc catch si vous voulez seulement assurer l'exécution d'un bloc finally, mais un catch ne peut exister sans try précédent.


Utilisation d'un bloc finally

Une clause finally garantit l'exécution indépendamment de si une exception a été lancée :

class Main { public static void main(String[] args) { try { int result = 5 / 0; } finally { System.out.println("Cleanup actions run here."); } } }

Sortie

Cleanup actions run here. Exception in thread "main" java.lang.ArithmeticException: / by zero at Main.main(Main.java:4)

Le bloc finally s'exécute après le bloc try, même quand une exception interrompt le flux normal.


Combinaison Try, Catch et Finally

Le code le plus robuste utilise les trois clauses pour gérer les erreurs, les signaler et nettoyer les ressources. Considérez cet exemple de gestion de fichier :

import java.io.*; class ListOfNumbers { private int[] list = {5, 6, 8, 9, 2}; public void writeList() { PrintWriter out = null; try { System.out.println("Attempting to write to file."); out = new PrintWriter(new FileWriter("OutputFile.txt")); for (int i = 0; i < 7; i++) { out.println("Value at: " + i + " = " + list[i]); } } catch (Exception e) { System.out.println("Exception: " + e.getMessage()); } finally { if (out != null) { System.out.println("Closing PrintWriter"); out.close(); } else { System.out.println("PrintWriter not opened."); } } } } class Main { public static void main(String[] args) { new ListOfNumbers().writeList(); } }

Sortie

Attempting to write to file. Exception: Index 5 out of bounds for length 5 Closing PrintWriter

Remarquez que la violation des bornes du tableau déclenche une exception, qui est attrapée et signalée. Le bloc finally assure que le PrintWriter est fermé, prévenant les fuites de ressources.

Bonne pratique : Placez toujours la logique de nettoyage – fermeture de fichiers, sockets ou connexions base de données – dans un bloc finally.

Note : finally peut ne pas s'exécuter si la JVM quitte (ex. System.exit()), une exception survient dans finally, ou le thread est terminé abruptement.


Gestion de plusieurs types d'exceptions

Un seul try peut être suivi de plusieurs clauses catch, chacune adaptée à une exception spécifique :

class ListOfNumbers { private int[] arr = new int[10]; public void writeList() { try { arr[10] = 11; } catch (NumberFormatException e) { System.out.println("NumberFormatException: " + e.getMessage()); } catch (IndexOutOfBoundsException e) { System.out.println("IndexOutOfBoundsException: " + e.getMessage()); } } } class Main { public static void main(String[] args) { new ListOfNumbers().writeList(); } }

Sortie

IndexOutOfBoundsException: Index 10 out of bounds for length 10

L'exécution tente d'abord le premier catch ; s'il ne correspond pas, elle passe au suivant jusqu'à trouver une correspondance.


Attraper plusieurs exceptions dans une seule clause (Java 7+)

Java 7 a introduit la capacité de combiner des types d'exceptions dans un seul catch, réduisant la duplication :

try { // code risqué } catch (IOException | SQLException ex) { // gestion unifiée }

Utilisez cette fonctionnalité quand différentes exceptions peuvent être gérées identiquement.


Try‑with‑resources pour nettoyage automatique

L'instruction try‑with‑resources ferme automatiquement toute ressource implémentant AutoCloseable :

try (PrintWriter out = new PrintWriter(new FileWriter("OutputFile.txt"))) { // utiliser la ressource } catch (IOException e) { // gérer erreurs I/O }

Puisque la ressource est déclarée dans les parenthèses, elle est fermée automatiquement quand le bloc se termine, même si une exception survient.

Pour des insights plus profonds, explorez la documentation officielle Java sur try‑with‑resources.

Java

  1. Maîtriser les opérateurs Java : Types, syntaxe et exemples pratiques
  2. Commentaires Java : Types, utilisation et bonnes pratiques
  3. Maîtriser la boucle for améliorée en Java : Syntaxe, exemples et bonnes pratiques
  4. Maîtriser les chaînes de caractères en Java : Création, méthodes et bonnes pratiques
  5. Maîtriser les interfaces Java : concepts, implémentation et bonnes pratiques
  6. Maîtriser les classes internes anonymes en Java : définition, syntaxe et exemples pratiques
  7. Maîtriser la gestion d'exceptions Java : try, catch, finally, throw et throws expliqués
  8. Maîtriser la gestion multi-exceptions en Java
  9. Maîtriser le try-with-resources Java : gestion automatique des ressources expliquée