在try/finally外部或内部初始化一次性资源

Hos*_*Aly 3 c# java resources coding-style

我已经看到了两种获取和处理资源的方法.或者:

Resource resource = getResource();
try { /* do something with resource */ }
finally { resource.close(); }
Run Code Online (Sandbox Code Playgroud)

要么:

Resource resource = null;
try { resource = getResource(); /* do something with resource */ }
finally { if (resource != null) resource.close(); }
Run Code Online (Sandbox Code Playgroud)

我想知道哪种风格更可取.第一个避免if条件,而第二个(我假设)在赋值之后但在进入try块之前处理线程中止的情况.这些风格有什么其他优点和缺点?我最好使用哪一个?

Jon*_*eet 6

在C#中,只需使用using语句:

using (Resource resource = GetResource())
{
    /* Do something */
}
Run Code Online (Sandbox Code Playgroud)

在分配和进入try块之间没有发生Java线程中止的风险 - 中止只发生在休眠和等待期间.编辑:我实际上无法在规范中找到这个,这有点令人担忧.嗯.