class Test { static class ResourcefulException1 extends Exception { } static class ResourcefulException2 extends Exception { } static class ResourcefulException3 extends Exception { } static class ExceptionalResource implements AutoCloseable { @Override public void close() throws ResourcefulException1 { } } ExceptionalResource provideExceptionalResource() throws ResourcefulException2 { return new ExceptionalResource(); } void m() { try (ExceptionalResource r = provideExceptionalResource()) { System.out.println(r); } catch (Exception e) { if (e instanceof ResourcefulException1) { System.out.println("1"); } else if (e instanceof ResourcefulException2) { System.out.println("2"); } else if (e instanceof ResourcefulException3) { System.out.println("3"); } } } }