finally里面的语句是一定会执行的。像在你的程序了,程序是这样执行的:
先执行try里的语句,但是遇到return话会看是否有finally块,有的话先不return,就先执行finally里的语句。如果在finally里也遇到了return,就会跳回try里先执行try的return,然后再执行finally的retrun,这样的话就会把前面try里return的值给覆盖了。你可以用下面的代码测试一下。
- public class Test {
- public static void main(String[] args) throws Exception { \
- foo(); }
- static int foo() throws Exception {
- try { System.out.println("1");
- System.exit(1);
- System.out.println("2");
- return 2;
- }
- finally {
- System.out.println("3");
- }
- }
- }
复制代码 |