java中的无痛资源管理

Ser*_*rge 6 java resources

在C++中,我们在构造函数中获取资源并在析构函数中释放它.

因此,当异常在函数中间上升时,将不会出现资源泄漏或锁定的互斥锁等等.

AFAIK java类没有析构函数.那么如何在Java中进行资源管理呢?

例如:

public int foo() {    
    Resource f = new Resource();
    DoSomething(f);
    f.Release();
}
Run Code Online (Sandbox Code Playgroud)

如果DoSomething抛出异常,如何释放资源?我们不能把try\catch块放在代码上,是吗?

qbe*_*uek 4

是的,你可以而且应该在你的代码周围放置 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)