在 中引发的异常最终会阻止在 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 块引发的异常被抑制。
Java 7 的新语法增加了异常抑制的另一个步骤:在 try 块中引发的异常会抑制在 try-with 部分中较早抛出的异常。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 块引发异常,并且当它尝试关闭 ZipFile 和 BufferedWriter 对象时,try-with-resources 语句最多可以引发两个异常。如果从 try 块引发异常,并且从 try-with-resources 语句引发一个或多个异常,则从 try-with-resources 语句引发的那些异常将被抑制,并且该块引发的异常是由 writeToFileZipFileContents 方法引发的异常。可以通过从 try 块引发的异常中调用 Throwable.getSuppressed 方法来检索这些被禁止的异常。
在有问题的代码中,每个块都明显地丢弃了旧的异常,甚至没有记录它,当你试图解决一些错误时,这是不好的:
http://en.wikipedia.org/wiki/Error_hiding