Java: Suppressed Exceptions
Suppressed exceptions were introduced at the same time as the try-with-resource feature. This is because in a try-with-resource two exceptions may be thrown (one from the
try block and one from the implicit call to
close()), and since a method can throw at most one exception, the other exception must be suppressed.
Suppressed exceptions can be used manually as well. To add an exception as suppressed by another exception, you call
Throwable.addSuppressed. To retrieve the suppressed exceptions you call
Exception exc = new Exception(); exc.addSuppressed(new Exception("Sup. 1")); exc.addSuppressed(new Exception("Sup. 2")); System.out.println(Arrays.toString(exc.getSuppressed()));
[java.lang.Exception: Suppressed 1, java.lang.Exception: Suppressed 2]
Stack traces includes suppressed exceptions, similarly to how they print “caused by” exceptions.
exc.printStackTrace()would in the previous example print:
java.lang.Exception at Example.main(Example.java:5) Suppressed: java.lang.Exception: Sup. 1 at Example.main(Example.java:6) Suppressed: java.lang.Exception: Sup. 2 at Example.main(Example.java:7)