先上连接:http://cmsblogs.com/?p=1574
class Test {
public int aaa() {
int x = 1;
try {
return ++x;
} catch (Exception e) {
} finally {
++x;
}
return x;
}
public static void main(String[] args) {
Test t = new Test();
int y = t.aaa();
System.out.println(y);
}
}
问题为:
如果在 try 语句块里使用 return 语句,那么 finally 语句块还会执行吗?(果你的答案是不会执行,请务必要看下去 ^_^)
如果执行,那么是怎样实现既执行 return 又执行 finally 的呢?(如果你的答案是不知道,请继续看下去!!)
上面的程序输出为什么是2?( 如果不知道,继续看下去)
在网上看到还有人还问“是先执行return还是先执行finally?”的
(个人觉得,如果知道finally会执行就可以得出是,先执行finally再执行return的。因为,如果先执行return,那么整个函数都跳出了,那么还怎么执行finally?^_^)
自己转述总结下用来以后学习
先说finally会不会执行,当然会了,因为tryCatch finally 中的finally定义为无论try代码块中怎么执行finally总是会执行的
执行顺序是这样的,当太try代码块中的代码执行到return的时候去执行finally里面的代码,此时return的内容会放在局部变量中,等finally代码执行完之后return的内容将会被重新释放出来,所以这里的y值是try代码块中return时保存在局部变量里面的那个值,当try和finally里都有return时,会忽略try的return,而使用finally的return