try-catch-finally有返回值的问题

gltbeyond
07-08-05 1 1103

try-catch-finally有返回值的问题


一个方法有返回值
public EJBReturn execute(...){
try{

..........

return EJBReturn.doReturn(....);


}catch(Exception e){

}finally{

return EJBReturn.doReturn(....);

}
}

问题:

1. 为什么 try,finally块里面都必须有return,
EclipseIDE下提示 finally 块里面的 不正常。 this block not complete normally.

2. 去掉 finally块里面的 return, 后,这个提示没有了,但是会 编译错误,因为缺少return..

3. 事实上,这个方法的确return了两个次, 你可以通过在EJBReturn.doReturn(....); 方法里面 使用log看看轨迹。

请教 各位



gltbeyond
2007-08-07 23:00

经师兄指点,问题解决了
原来有对finally理解不清楚的地方。

更改后结构为:

private EJBReturn exectue(...){

try{
//不需要return ;
//如果逻辑上需要中止流程,要return.
}catch(Exception e){
//不需要return
//如果逻辑上需要中止流程,要return;
}finally{
//不需要return
}

。。。。。// 在没有return的情况下,此代码仍旧执行。
return EJBReturn.doReturn(...); //最后一行代码
}

但这是否意味着,finally在 最后一行代码 执行完后 才执行?
还是确保,finally块一定会执行?
通过测试发现, finally是确保一定在方法返回前执行,
而不是确保一定在 方法的某个代码之前执行。


finally里面要避免Exception发生,否则finally也运行不完了。