Sonunda blokta atılan istisnalar, daha önce try veya catch bloğunda atılan istisnayı bastırır.
Java 7 örneği: http://ideone.com/0YdeZo
Gönderen JavaDoc'u en Örneğin:
static String readFirstLineFromFileWithFinallyBlock(String path)
throws IOException {
BufferedReader br = new BufferedReader(new FileReader(path));
try {
return br.readLine();
} finally {
if (br != null) br.close();
}
}
Ancak bu örnekte, readLine ve close yöntemlerinin her ikisi de istisnalar atarsa, readFirstLineFromFileWithFinallyBlock yöntemi, nihayet bloğundan atılan istisnayı atar; try bloğundan atılan istisna bastırılır.
try-with
Java 7'nin yeni sözdizimi başka bir istisna bastırma adımı ekler: Deneme bloğunda atılan istisnalar, deneme bölümünde daha önce atılanları bastırır.
aynı örnekten:
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());
}
}
Kaynaklarla dene deyimi ile ilişkili kod bloğundan bir istisna atılabilir. Yukarıdaki örnekte, try bloğundan bir istisna atılabilir ve ZipFile ve BufferedWriter nesnelerini kapatmaya çalıştığında, try-with-resources deyiminden en fazla iki istisna atılabilir. Try bloğundan bir istisna atılırsa ve kaynakları dene denemesinden bir veya daha fazla istisna atılırsa, try-with-resources ifadesinden atılan istisnalar bastırılır ve blok tarafından atılan istisna writeToFileZipFileContents yöntemi tarafından atılır. Bu engellenmiş istisnaları, try bloğu tarafından atılan istisnadan Throwable.getSuppressed yöntemini çağırarak alabilirsiniz.
Söz konusu kodda, her blok eski istisnayı açıkça atar, hatta günlüğe kaydetmez, bazı hataları çözmeye çalışırken iyi değildir:
http://en.wikipedia.org/wiki/Error_hiding