I have this piece of code:
public class Resource implements AutoCloseable{
private String s = "I am resource.";
private int NuberOfResource;
public Resource(int NuberOfResource) {
this.NuberOfResource = NuberOfResource;
System.out.println(s + " My number is: " + NuberOfResource);
}
@Override
public void close() throws Exception {
System.out.println("Closing...");
}
public void print(){
System.out.println("Hello");
}
And main class:
public class Main {
public static void main(String[] args) {
int a, b = 0;
a = 5;
try {
Resource first = new Resurs(1);
Resource second = new Resurs(2);
System.out.println("I will cause exception");
a /= b;
} catch (Exception e) {
e.printStackTrace();
}
}
}
I would like to know why I get this output:
I am resource. My number is 1.
I am resource. My number is 2.
I will cause exception.
java.lang.ArithmeticException: / by zero
Instead of:
I am resource. My number is 1.
I am resource. My number is 2.
Closing...
Closing...
I will cause exception.
java.lang.ArithmeticException: / by zero
Because you're not using try-with-resources
. AutoCloseable
is only invoked with that, not with regular try/catch
statements.
The correct pattern would be
try(Resource first = new Resource(1); Resource second = new Resource(2)) {
// .. whatever
}