java中try{}catch{}finally{}结构中try中有return语句怎么处理

java中try{}catch{}finally{}结构中try中有return语句怎么办?
package com.test;
/*
* 问题:try{}catch{}finally{}语句块中如果try{}中有一个return语句那么finally{}里的代码会不会
* 执行,如果执行什么时候执行?
* 答:会执行,在return语句执行后
* 老师批阅:叉叉
* 百思不得其解,试了又试,结果发现了java在MyEclipse下的一个bug
* 正确答案:会执行,在return语句执行前
*/
public class TryReturn {

public static void main(String[] args) {
TrTest tt = new TrTest();
System.out.println("After tt.ret() result="+tt.ret());
}
}
class TrTest{
public int result=0;

public int ret(){
try {
result=11;
System.out.println("Before return code! result="+result);

return result;

} catch (Exception e) {
e.printStackTrace();
}finally{
result=22;
System.out.println("Finally code(result=22). result="+result);
return result+3;
}
return result+5;  //+5是为了区别try中返回的result
}
}
/*
* 运行结果:
* Before return code! result=11
* Finally code(result=22). result=22
* After tt.ret() result=11
*
* 如果老师提供的答案是正确的那么:After tt.ret() result=11 中的11怎么解释呢,应
* 该是22呀?如果按照结果来说的话是执行到return语句的时候是先执行return语句把11放到
* 输出语句中但是输出语句还没有执行,接着执行finally中的代码,执行完了以后返回到输出
* 语句继续执行,所以打印出来的是:After tt.ret() result=11
* 那么也就是说老师提供的答案是错误的。
* 为了验证我的猜想将ret()方法修改一下,在finally中添加return result+3;语句(同时注
* 释掉最后的return语句),如果返回的是:After tt.ret() result=25 则说明老师答案是
* 正确的,也就是说在执行finally中的代码时,try中的return语句并没有执行,执行完finally
* 中的代码后(包括finally中的return语句)接着执行输出语句。
*/

public int ret(){
try {
result=11;
System.out.println("Before return code! result="+result);

return result;

} catch (Exception e) {
e.printStackTrace();
}finally{
result=22;
System.out.println("Finally code(result=22). result="+result);
return result+3;
}
//return result+5;  //+5是为了区别try中返回的result
}
/*
* 运行结果:
* Before return code! result=11
* Finally code(result=22). result=22
* After tt.ret() result=25
*
* 哈哈,结果证明还是老师正确,这只是一个bug,具体的bug产生原因还有待分析
*/