在C++中,我们在构造函数中获取资源并在析构函数中释放它.
因此,当异常在函数中间上升时,将不会出现资源泄漏或锁定的互斥锁等等.
AFAIK java类没有析构函数.那么如何在Java中进行资源管理呢?
例如:
public int foo() {
Resource f = new Resource();
DoSomething(f);
f.Release();
}
Run Code Online (Sandbox Code Playgroud)
如果DoSomething抛出异常,如何释放资源?我们不能把try\catch块放在代码上,是吗?
是的,你可以而且应该在你的代码周围放置 try/catch/finally 块。在 C# 中,有一个简写的“using”语句,但在 Java 中,您会遇到这样的情况:
public int foo() {
Resource f = new Resource();
try {
DoSomething(f);
}
finally {
f.Release();
}
}
Run Code Online (Sandbox Code Playgroud)