Dernière chance ! -50 % sur DataCamp Premium
L'offre se termine dans
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.
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.
try {
// Code that may throw an exception
} catch (ExceptionType e) {
// Code to handle the exception
} finally {
// Code that will always execute
}
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.
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.
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.
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.return dans le bloc finally, car cela peut obscurcir le flux du programme et le rendre plus difficile à comprendre.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
}
try (FileInputStream fis = new FileInputStream("example.txt")) {
// Perform file operations
} catch (IOException e) {
System.out.println("Exception: " + e);
}
try-catch imbriqué dans finally si nécessaire.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.