因此,我遇到了这段代码,想知道复合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中尝试执行操作?
复合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] 删除。
我来说两句