try / catch / finally块中的执行顺序,try块中有复合return语句

柯密特:

因此,我遇到了这段代码,想知道复合return语句是否会失败,因为在执行return语句之前执行了finally块:

public DataObject processor(LinkedHashMap itemList)
{
    Extractor ex = DataExtractor.getExtractor();

    try{

        ex.open();

        return ex.processData(itemList);

    }catch(Exception e){

        /* error code */

    }finally{

        if(ex.isOpen()) ex.close();
    }
}

我的看法是执行了finally块,关闭了Extractor,然后使用封闭的Extractor执行了复合return语句,这将导致错误。

问题:复合return语句是否在执行finally块之前或之后执行,从而导致在封闭的Extractor中尝试执行操作?

斯蒂芬·C:

复合return语句是在执行finally块之前还是之后执行的?

答案是两个

  • 假设您在该点之前没有遇到异常,ex.processData(itemList);则会finally之前进行评估

  • 实际之后return执行finally

...导致关闭的提取器尝试执行操作?

那不会发生。


实现此目标的首选方式如下所示:

try (Extractor ex = DataExtractor.getExtractor().open()) {
    return ex.processData(itemList);
} catch(SpecificException e) {
    /* error code */
}

使用Java 7+ 尝试使用资源,并让其关闭Extractor而且(在大多数情况下)不要抓Exception

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章