【发布时间】:2019-04-25 01:17:30
【问题描述】:
所以,我遇到了这段代码,想知道复合 return 语句是否会失败,因为 finally 块是在 return 语句执行之前执行的:
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 块,关闭提取器,然后执行复合返回语句,使用关闭的提取器,这将导致错误。
问题:复合 return 语句是在 finally 块执行之前还是之后执行,导致尝试使用关闭的 Extractor 进行操作?
【问题讨论】:
-
finally 块总是最后运行
-
我认为是先执行
ex.processData(itemList),并保存返回值,然后执行finally子句,再执行return保存的值。 -
return foo();和Object f = foo();return f;没有区别 -
@markspace 如果你在 try 块中返回一个变量名,那么如果你在 finally 块中修改并返回变量名,最后你会得到修改后的名称,所以你是对的。
标签: java