AlikElzin-kilaka AlikElzin-kilaka - 2 months ago 22
Java Question

Does Java's try-with-resources catch errors or just exceptions?

I have some junit tests which create some resources which should also be closed.

One way to implement this logic is using the


What I did was to encapsulate the creation in some utility class to be reused. For example:

class UserCreatorTestUtil implements AutoClosable {
User create() {...}
void close() {...}

The whole point is for the object to close itself, rather than needing to remember to close it in

The usage should be:

void test() {
try (UserCreatorTestUtil userCreatorTestUtil = new UserCreatorTestUtil()) {
User user = userCreatorTestUtil.create();
// Do some stuff regarding the user's phone
Assert.assertEquals("123456789", user.getPhone());

The problem is that junit's assert keyword throws an
- not

Will the try-with-resource "catch" the
and invoke the close method?

* Couldn't find the answer in the try-with-resources documentation.


It does not catch anything. But it does finally close all resources.

finally blocks are run even when an Error is thrown.