Accéder au contenu principal
Documents
Tableaux JavaProgrammation orientée objet en JavaTraitement des fichiers en JavaIntroduction To JavaLes bases du langage JavaMots-clés Java

mot-clé finally en Java

Le bloc finally en Java est un élément essentiel de la gestion des exceptions. Il est utilisé pour exécuter du code important tel que la fermeture de ressources, qu'une exception soit levée ou non. Le bloc finally s'exécute toujours lorsque le bloc try se termine, ce qui garantit l'exécution du code de nettoyage.

Utilisation

Le bloc finally est utilisé en conjonction avec les blocs try et catch. Il est placé après le bloc catch ou directement après le bloc try s'il n'y a pas de bloc catch.

Syntax

try {
    // Code that may throw an exception
} catch (ExceptionType e) {
    // Code to handle the exception
} finally {
    // Code that will always execute
}

Exemples

Exemple 1 : Utilisation de base

public class FinallyExample {
    public static void main(String[] args) {
        try {
            int data = 50 / 0; // This will throw an ArithmeticException
        } catch (ArithmeticException e) {
            System.out.println("Exception caught: " + e);
        } finally {
            System.out.println("Finally block is always executed");
        }
    }
}

Dans cet exemple, un ArithmeticException est lancé et pris dans le bloc catch. Quelle que soit l'exception, le bloc finally s'exécute et imprime un message.

Exemple 2 : Enfin sans prise

public class FinallyWithoutCatchExample {
    public static void main(String[] args) {
        try {
            System.out.println("Inside try block");
        } finally {
            System.out.println("Finally block executed");
        }
    }
}

Ici, aucune exception n'est levée et il n'y a pas de bloc catch. Le bloc finally s'exécute après le bloc try et imprime son message.

Exemple 3 : Nettoyage des ressources

import java.io.*;

public class FinallyResourceExample {
    public static void main(String[] args) {
        FileInputStream fis = null;
        try {
            fis = new FileInputStream("example.txt");
            // Perform file operations
        } catch (FileNotFoundException e) {
            System.out.println("File not found: " + e);
        } finally {
            if (fis != null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    System.out.println("Error closing file: " + e);
                }
            }
        }
    }
}

Cet exemple illustre l'utilisation du bloc finally pour garantir la fermeture d'un site FileInputStream et éviter ainsi les fuites de ressources.

Conseils et bonnes pratiques

  • Gestion des ressources: Utilisez le bloc finally pour fermer des ressources telles que des fichiers, des connexions à des bases de données ou des sockets réseau afin d'éviter les fuites de ressources.
  • Évitez les déclarations de retour: Évitez de placer les instructions return dans le bloc finally, car cela peut obscurcir le flux du programme et le rendre plus difficile à comprendre.
  • Essai imbriqué: Lorsque vous travaillez avec plusieurs ressources, pensez à utiliser des blocs try-finally imbriqués pour vous assurer que chaque ressource est correctement fermée.
    try {
        // Resource 1
    } finally {
        try {
            // Resource 2
        } finally {
            // Cleanup for Resource 2
        }
        // Cleanup for Resource 1
    }
  • Utilisez la méthode "Essayez avec vos ressources": Pour la gestion des ressources, préférez l'instruction try-with-resources introduite dans Java 7, qui ferme automatiquement les ressources.
    try (FileInputStream fis = new FileInputStream("example.txt")) {
        // Perform file operations
    } catch (IOException e) {
        System.out.println("Exception: " + e);
    }
  • Nettoyage cohérent: Veillez à ce que le code de nettoyage soit cohérent et ne lance pas d'exceptions susceptibles de masquer l'exception initiale. Utilisez try-catch imbriqué dans finally si nécessaire.
  • Scénarios d'exécution: Comprenez que le bloc finally s'exécute toujours, sauf dans les cas où la JVM se retire pendant les blocs try ou catch par le biais d'appels tels que System.exit(), ou dans des scénarios impliquant des boucles infinies ou des threads de démon.

Apprendre l'essentiel de Java

Développez vos compétences en Java à partir de la base et maîtrisez les concepts de programmation.
Commencez à apprendre gratuitement