黑马程序员技术交流社区

标题: finally与return 和break语句的执行先后顺序。 [打印本页]

作者: jeasonlzy    时间: 2015-3-16 23:37
标题: finally与return 和break语句的执行先后顺序。
  1. public class  smallT
  2. {
  3.          public static void  main(String args[])
  4.          {
  5.                   smallT t  = new  smallT();
  6.                   int  b  =  t.get();
  7.                   System.out.println(b);
  8.          }
  9.         
  10.          public int  get()
  11.          {
  12.                   try
  13.                   {
  14.                           return 1 ;
  15.                   }
  16.                   finally
  17.                   {
  18.                           return 2 ;
  19.                   }
  20.          }
  21. }
复制代码



返回的结果是2
我可以通过下面一个例子程序来帮助我解释这个答案,从下面例子的运行结果中可以发现,try中的return语句调用的函数先于finally中调用的函数执行,也就是说return语句先执行,finally语句后执行,所以,返回的结果是2Return并不是让函数马上返回,而是return语句执行后,将把返回结果放置进函数栈中,此时函数并不是马上返回,它要执行finally语句后才真正开始返回。
在讲解答案时可以用下面的程序来帮助分析:
  1. public  class Test {

  2.     /**
  3.      * @param args add by zxx ,Dec 9, 2008
  4.      */
  5.     public static void main(String[] args) {
  6.        // TODO Auto-generated method stub
  7.        System.out.println(new Test().test());;
  8.     }

  9.     int test()
  10.     {
  11.        try
  12.        {
  13.            return func1();
  14.        }
  15.        finally
  16.        {
  17.            return func2();
  18.        }
  19.     }
  20.    
  21.     int func1()
  22.     {
  23.        System.out.println("func1");
  24.        return 1;
  25.     }
  26.     int func2()
  27.     {
  28.        System.out.println("func2");
  29.        return 2;
  30.     }  
  31. }
复制代码


-----------执行结果-----------------
func1
func2
2
结论:finally中的代码比return break语句后执行






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2