finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

 

执行下面的代码:

public class TestReturn {
   public String message() {
         System.out.println("returned start");
         return "return";
     }

     public String testFinal() {
         try {
            return  message();
         } catch (Exception e) {
             e.printStackTrace();
             return  "exception";
         } finally {
             System.out.println("do finally");
//             return "finally";                                   -----1
         }
     }

     public static void main(String[] args) {
      TestReturn test = new TestReturn();
       System.out.println( test.testFinal());
     }


}

 

执行结果为:

returned start
do finally
return

 

把代码中红色那行注释去掉 执行结果为:

returned start
do finally
finally

 

通过这个例子可以发现

try中的return语句调用的函数先于finally中调用的函数执行,也就是说return语句先执行,finally语句后执行Return并不是让函数马上返回,而是return语句执行后,将把返回结果放置进函数栈中,此时函数并不是马上返回,它要执行finally语句后才真正开始返回,而在finally如果有return那么就返回finnally的值。

你可能感兴趣的:(finally {}里的code会不会被执行,什么时候被执行,在return前还是后?)