Try-Catch-Enfin en Java | Gestion des exceptions

Feb 21 2023
· Try Blocks · Catch Blocks · Enfin des blocs · Rassembler le tout · Try blocks imbriqués · Catch multiple exceptions Try Blocks Les blocs try sont la première partie des blocs try/catch. Ils contiennent tout code susceptible de provoquer une exception.

· Try Blocks
· Catch Blocks
· Enfin des blocs
· Rassembler le tout
· Try blocks imbriqués
· Capturer plusieurs exceptions

Essayez les blocs

Les blocs try sont la première partie des blocs try/catch. Ils contiennent tout code susceptible de provoquer une exception. En Java, lorsque nous ne sommes pas certains du résultat d'une instruction, nous pouvons placer ces instructions dans ce bloc try. Un bloc try peut être utilisé dans une méthode ou un autre bloc try.

Le bloc try est toujours suivi d'un bloc catch , qui gère l'exception qui se produit dans le bloc try associé.

Pour IOExceptions, placez tout code qui crée, lit, écrit ou ferme un fichier dans un bloc try

Syntaxe

La première étape de la construction d'un gestionnaire d'exceptions consiste à inclure le code susceptible de lever une exception dans un bloc try . En général, un bloc try ressemble à ceci :

try {
    code
}
catch and finally blocks . . .

Exemple

Pour construire un gestionnaire d'exceptions pour la méthode writeList à partir de la classe ListOfNumbers, placez les instructions de levée d'exception de la méthode writeList dans un bloc try . Il y a plus d'une façon de le faire. Vous pouvez placer chaque ligne de code susceptible de lever une exception dans son propre bloc try et fournir des gestionnaires d'exception distincts pour chacun. Ou, vous pouvez mettre tout le code writeList dans un seul bloc try et lui associer plusieurs gestionnaires. La liste suivante utilise un bloc try pour toute la méthode car le code en question est très court.

private List<Integer> list;
private static final int SIZE = 10;

public void writeList() {
    PrintWriter out = null;
    try {
        System.out.println("Entered try statement");
        FileWriter f = new FileWriter("OutFile.txt");
        out = new PrintWriter(f);
        for (int i = 0; i < SIZE; i++) {
            out.println("Value at: " + i + " = " + list.get(i));
        }
    }
    catch and finally blocks  . . .
}

Essayez les notes latérales de bloc

  • En plus du code qui pourrait déclencher une exception, les blocs try peuvent (mais ne doivent pas nécessairement) contenir également du code qui ne provoque pas d'exceptions.
  • Les programmes peuvent contenir plus d'un bloc try. De plus, il est possible d'avoir un bloc try à l'intérieur d'un autre bloc try.

Blocs de capture

La seconde moitié d'un bloc try/catch est le bloc catch. Alors que les blocs try contiennent du code qui provoque une exception, les blocs catch contiennent le code qui gère une exception.

En Java, le bloc catch est utilisé pour gérer l'exception qui est interceptée à partir du bloc try. Le bloc catch inclut le code et il est exécuté si une exception à l'intérieur du bloc try se produit. Si le système rencontre une exception lors de l'exécution des instructions dans un bloc try, il ignore le reste des instructions et transfère le contrôle au bloc catch correspondant.

Le bloc catch intercepte et gère les exceptions du bloc try en déclarant le type d'exception dans le paramètre. L'exception déclarée dans le bloc catch doit être l'exception de la classe parente (c'est-à-dire Exception) ou le type d'exception généré. Cependant, la meilleure approche consiste à déclarer le type d'exception généré.

Le bloc catch suivra toujours après le bloc try. Une fois que le contrôle sort du bloc try, il n'y a aucun moyen de le reprendre dans le bloc try.

Syntaxe

Vous associez des gestionnaires d'exceptions à un bloc try en fournissant un ou plusieurs blocs catch directement après le bloc try . Aucun code ne peut se trouver entre la fin du bloc try et le début du premier bloc catch .

try {
  
} catch (ExceptionType name) {

}

Le bloc catch contient du code qui est exécuté si et quand le gestionnaire d'exceptions est appelé. Le système d'exécution appelle le gestionnaire d'exceptions lorsque le gestionnaire est le premier dans la pile d'appels dont ExceptionType correspond au type de l'exception levée. Le système considère qu'il s'agit d'une correspondance si l'objet lancé peut légalement être affecté à l'argument du gestionnaire d'exceptions.

Arguments du bloc catch

Les blocs catch prennent un argument, le type d'exception qu'ils sont censés intercepter (traiter). Ces arguments peuvent aller d'un type d'exception très spécifique à une catégorie fourre-tout très générale d'exceptions

Exemple

Voici deux gestionnaires d'exceptions pour la méthode writeList :

try {

} catch (IndexOutOfBoundsException e) {
    System.err.println("IndexOutOfBoundsException: " + e.getMessage());
} catch (IOException e) {
    System.err.println("Caught IOException: " + e.getMessage());
}

Capturer le contenu du bloc

Le contenu d'un bloc catch correspond à ce que vous voulez qu'il se produise lorsqu'une exception se produit (par exemple, lorsque le fichier auquel vous accédez n'existe pas.) Vous pouvez soit imprimer un message, soit avoir un code qui fait quelque chose pour corriger l'erreur (par exemple, demander le nom de fichier à nouveau.

Catch Block Messages (Affichage d'une description d'une exception)

Vous pouvez imprimer n'importe quel message à l'intérieur d'un bloc catch.

Utilisation de toString()

Throwable remplace la méthode toString( ) (définie par Object) afin qu'elle renvoie une chaîne contenant une description de l'exception. Vous pouvez afficher cette description dans une instruction println() en passant simplement l'exception comme argument. Par exemple, le bloc catch du programme précédent peut être réécrit comme ceci

catch (ArithmeticException e) {
    System.out.println("Exception: " + e);
    a = 0; // set a to zero and continue
  }

Exception: java.lang.ArithmeticException: / by zero

  • getMessage() : renvoie un message d'erreur spécifique à chaque type d'exception. Associez ceci à une instruction println.
  • printStackTrace() : imprime le type d'erreur et où elle s'est produite dans le programme Ces méthodes sont particulièrement utiles pour déboguer et trouver la raison d'une exception
  • Chaque bloc try nécessite au moins un bloc catch.
  • Les blocs try peuvent avoir plusieurs blocs catch. Voir l'exemple à droite.
  • Les blocs catch doivent venir directement après le bloc try auquel ils sont associés.

Enfin des blocs

Un mot clé finally est utilisé pour créer un bloc de code qui suit un bloc try. Un bloc de code finally est toujours exécuté, qu'une exception se soit produite ou non. À l'aide d'un bloc finally, il vous permet d'exécuter toutes les instructions de type nettoyage que vous souhaitez exécuter, peu importe ce qui se passe dans le code protégé. Un bloc finally apparaît à la fin du bloc catch. Enfin, les blocs sont utilisés pour annuler les références d'objet et fermer les flux d'E/S.

Le bloc finally s'exécute toujours lorsque le bloc try se termine. Cela garantit que le bloc finally est exécuté même si une exception inattendue se produit. Mais finalement est utile pour plus que la simple gestion des exceptions - il permet au programmeur d'éviter que le code de nettoyage soit accidentellement contourné par un return , continue ou break . Mettre du code de nettoyage dans un bloc finally est toujours une bonne pratique, même lorsqu'aucune exception n'est anticipée.

Le système d'exécution exécute toujours les instructions dans le bloc finally indépendamment de ce qui se passe dans le bloc try . C'est donc l'endroit idéal pour effectuer le nettoyage.

Syntaxe

finally {
  // cleanup code
  }

Le bloc finally suivant pour la méthode writeList nettoie puis ferme PrintWriter et FileWriter .

finally {
    if (out != null) { 
        System.out.println("Closing PrintWriter");
        out.close(); 
    } else { 
        System.out.println("PrintWriter not open");
    } 
    if (f != null) {
	    System.out.println("Closing FileWriter");
	    f.close();
	}	
}

  • Enfin, les blocs sont un ajout facultatif aux blocs try/catch.
  • Enfin, les blocs sont utilisés pour le code que vous souhaitez exécuter, peu importe ce qui se passe exceptionnellement avec votre code.
  • Ils sont la dernière chose qui s'exécute et ils s'exécuteront à chaque fois que vous exécuterez votre programme.
  • Une utilisation d'un bloc finally serait de s'assurer qu'un fichier est fermé à la fin d'un programme.

private List<Integer> list;
private static final int SIZE = 10;

public void writeList() {
    PrintWriter out = null;
    try {
        System.out.println("Entered try statement");
        FileWriter f = new FileWriter("OutFile.txt");
        out = new PrintWriter(f);
        for (int i = 0; i < SIZE; i++) {
            out.println("Value at: " + i + " = " + list.get(i));
        }
    } 
    // catch blocks
    catch (IndexOutOfBoundsException e) {
        System.err.println("IndexOutOfBoundsException: " + e.getMessage());
    } 
    catch (IOException e) {
        System.err.println("Caught IOException: " + e.getMessage());
    }
    // finally block
  finally {
    if (out != null) { 
        System.out.println("Closing PrintWriter");
        out.close(); 
    } else { 
        System.out.println("PrintWriter not open");
    } 
    if (f != null) {
     System.out.println("Closing FileWriter");
     f.close();
 } 
}
}

Lorsque des blocs try imbriqués sont utilisés, le bloc try interne est exécuté en premier. Toute exception lancée dans le bloc try interne est interceptée dans le bloc catch correspondant. Si un bloc catch correspondant n'est pas trouvé, alors le bloc catch du bloc try externe est inspecté. Ce processus se poursuit jusqu'à ce que toutes les instructions try imbriquées soient épuisées. Si aucun bloc catch correspondant n'est trouvé, le programme se termine anormalement.

visite bloc try-catch imbriqué .

Capturer plusieurs exceptions

Comme vous le savez peut-être en Java, nous pouvons utiliser plusieurs blocs catch pour gérer plusieurs exceptions

Exemple :

catch (IOException ex) {
     logger.error(ex);
     throw new MyException(ex.getMessage());
catch (SQLException ex) {
     logger.error(ex);
     throw new MyException(ex.getMessage());
}

Exemple :

catch(IOException | SQLException ex){
     logger.error(ex);
     throw new MyException(ex.getMessage());
}

Bon apprentissage

Rejoindre Mouad Oumous Java WhatsApp Group REJOINDRE

Rejoindre Mouad Oumous Telegram Channel REJOINDRE

Soutenez notre publication en la suivant

Premiers pas avec Spring Boot : un didacticiel complet pour les débutants Spring Boot Security | authentification unique | OAuth2 avec Okta Question d'entretien basée sur le flux Java8 la plus fréquemment posée — Partie 2 Guide de mappage d'objets avec ModelMapper dans Java