Autocloseable类不会调用默认的close方法

use*_*755 1 java exception autocloseable

我有这段代码:

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");
    }
Run Code Online (Sandbox Code Playgroud)

主要课程:

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();
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

我想知道为什么我得到这个输出:

I am resource. My number is 1.
I am resource. My number is 2.
I will cause exception.
java.lang.ArithmeticException: / by zero
Run Code Online (Sandbox Code Playgroud)

代替:

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
Run Code Online (Sandbox Code Playgroud)

Kay*_*man 10

因为你没有使用try-with-resources.AutoCloseable仅使用它调用,而不是使用常规try/catch语句.

正确的模式是

try(Resource first = new Resource(1); Resource second = new Resource(2)) {
   // .. whatever
}
Run Code Online (Sandbox Code Playgroud)