Les exceptions lancées dans le bloc finally suppriment les exceptions lancées précédemment dans le bloc try ou catch.
Exemple de Java 7 : http://ideone.com/0YdeZo
De La Javadoc exemple :
static String readFirstLineFromFileWithFinallyBlock(String path)
throws IOException {
BufferedReader br = new BufferedReader(new FileReader(path));
try {
return br.readLine();
} finally {
if (br != null) br.close();
}
}
Cependant, dans cet exemple, si les méthodes readLine et close lèvent toutes deux des exceptions des exceptions, alors la méthode readFirstLineFromFileWithFinallyBlock lève l'exception levée par le bloc finally ; l'exception levée par le bloc try est supprimée. l'exception générée par le bloc try est supprimée.
Le nouveau try-with
de Java 7 ajoute une nouvelle étape dans la suppression des exceptions : Les exceptions lancées dans le bloc d'essai suppriment celles lancées précédemment dans la partie try-with.
du même exemple :
try (
java.util.zip.ZipFile zf = new java.util.zip.ZipFile(zipFileName);
java.io.BufferedWriter writer = java.nio.file.Files.newBufferedWriter(outputFilePath, charset)
) {
for (java.util.Enumeration entries = zf.entries(); entries.hasMoreElements();) {
String newLine = System.getProperty("line.separator");
String zipEntryName = ((java.util.zip.ZipEntry)entries.nextElement()).getName() + newLine;
writer.write(zipEntryName, 0, zipEntryName.length());
}
}
Une exception peut être levée à partir du bloc de code associé à l'instruction try-with-resources. Dans l'exemple ci-dessus, une exception peut être lancée depuis le bloc try, et jusqu'à deux exceptions peuvent être lancées à partir de l'instruction try-with-resources lorsqu'elle tente de fermer le fichier ZipFile et BufferedWriter. Si une exception est levée dans le bloc et qu'une ou plusieurs exceptions sont levées par l'instruction try-with-resources, alors les exceptions lancées par l'instruction l'instruction try-with-resources sont supprimées, et l'exception levée par l'instruction par le bloc est celle qui est levée par l'instruction writeToFileZipFileContents. Vous pouvez récupérer ces exceptions supprimées exceptions supprimées en appelant la méthode Throwable.getSuppressed à partir de la exception lancée par le bloc try.
Dans le code de la question, chaque bloc rejette purement et simplement l'ancienne exception, sans même l'enregistrer, ce qui n'est pas bon lorsque l'on essaie de résoudre des bogues :
http://en.wikipedia.org/wiki/Error_hiding