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

07-08-05 gltbeyond

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也运行不完了。