Pengecualian yang dimasukkan akhirnya memblokir menekan pengecualian yang dilemparkan sebelumnya dalam mencoba atau menangkap blok.
Java 7 contoh: http://ideone.com/0YdeZo
Dari contoh 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();
}
}
Namun, dalam contoh ini, jika metode readLine dan menutup kedua melempar pengecualian, maka metode readFirstLineFromFileWithFinallyBlock melempar pengecualian yang dilemparkan dari blok akhirnya; pengecualian yang dilemparkan dari blok percobaan ditekan.
try-with
Sintaks baru Java 7 menambahkan langkah lain dari penindasan pengecualian: Pengecualian yang dilemparkan dalam blok coba menekan yang dilempar sebelumnya di bagian try-with.
dari contoh yang sama:
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());
}
}
Pengecualian dapat dikeluarkan dari blok kode yang terkait dengan pernyataan coba-dengan-sumber daya. Dalam contoh di atas, pengecualian dapat dilempar dari blok percobaan, dan hingga dua pengecualian dapat dilemparkan dari pernyataan coba-dengan-sumber daya ketika mencoba untuk menutup objek ZipFile dan BufferedWriter. Jika pengecualian dilemparkan dari blok percobaan dan satu atau lebih pengecualian dilemparkan dari pernyataan coba-dengan-sumber daya, maka pengecualian-pengecualian yang dilemparkan dari pernyataan coba-dengan-sumber daya ditekan, dan pengecualian yang dilemparkan oleh blok adalah satu-satunya. yang dilemparkan oleh metode writeToFileZipFileContents. Anda dapat mengambil pengecualian yang ditekan ini dengan memanggil metode Throwable.getSuppressed dari pengecualian yang dilemparkan oleh blok try.
Dalam kode dari pertanyaan, setiap blok dengan jelas membuang pengecualian lama, bahkan tidak mencatatnya, tidak baik ketika Anda mencoba menyelesaikan beberapa bug:
http://en.wikipedia.org/wiki/Error_hiding