Исключения, сгенерированные в блоке finally, подавляют исключение, сгенерированное ранее в блоке try или catch.
Пример Java 7: http://ideone.com/0YdeZo
Из примера Javadoc :
static String readFirstLineFromFileWithFinallyBlock(String path)
throws IOException {
BufferedReader br = new BufferedReader(new FileReader(path));
try {
return br.readLine();
} finally {
if (br != null) br.close();
}
}
Однако в этом примере, если методы readLine и закрывают оба исключения, метод readFirstLineFromFileWithFinallyBlock генерирует исключение, выброшенное из блока finally; исключение, выброшенное из блока try, подавляется.
Новый try-with
синтаксис Java 7 добавляет еще один шаг подавления исключений: исключения, сгенерированные в блоке try, подавляют те, что были сгенерированы ранее в части try-with.
из того же примера:
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());
}
}
Исключение может быть выдано из блока кода, связанного с оператором try-with-resources. В приведенном выше примере исключение может быть сгенерировано из блока try, и до двух исключений может быть сгенерировано из оператора try-with-resources, когда он пытается закрыть объекты ZipFile и BufferedWriter. Если исключение выдается из блока try, а одно или несколько исключений выбрасываются из оператора try-with-resources, то исключения, выбрасываемые из оператора try-with-resources, подавляются, и исключение, выбрасываемое блоком, является единственным это бросается методом writeToFileZipFileContents. Вы можете получить эти исключенные исключения, вызвав метод Throwable.getSuppressed из исключения, сгенерированного блоком try.
В коде из вопроса каждый блок явно отбрасывает старое исключение, даже не регистрируя его, не очень хорошо, когда вы пытаетесь устранить некоторые ошибки:
http://en.wikipedia.org/wiki/Error_hiding