gpt4 book ai didi

java - Autocloseable 类不调用默认关闭方法

转载 作者:行者123 更新时间:2023-11-29 09:52:34 25 4
gpt4 key购买 nike

我有这段代码:

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

和主类:

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 am resource. My number is 1.
I am resource. My number is 2.
I will cause exception.
java.lang.ArithmeticException: / by zero

代替:

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

最佳答案

因为您没有使用try-with-resourcesAutoCloseable 仅通过它调用,而不是通过常规的 try/catch 语句调用。

正确的模式是

try(Resource first = new Resource(1); Resource second = new Resource(2)) {
// .. whatever
}

关于java - Autocloseable 类不调用默认关闭方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35009153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com