黑马程序员技术交流社区

标题: 分享try——catch——finally执行顺序 [打印本页]

作者: 王亚亚    时间: 2014-6-3 11:16
标题: 分享try——catch——finally执行顺序
  1. public class TestD {
  2.         public static void main(String[] args) {
  3.                
  4.         System.out.println(ex());
  5.                
  6.         }
  7.         public static String  ex(){
  8.                 String a = "null";
  9.                 try{
  10.                        
  11.                         throw new Exception();
  12.                
  13.                 }catch (Exception e){
  14.                         a = "catch";
  15.                         return a;
  16.                        
  17.                 }finally {
  18.                         a="finally";
  19.                         return a;
  20.                 }
  21.         }
  22. }
复制代码

首先,主函数调用方法ex();然后执行try语句,抛出一个异常,异常被catch捕获,执行catch中的语句,执行完a = "catch";之后,a 的值变为catch,然后发现下一条语句是return,因此直接执行fianlly语句,然后执行finally语句中的return语句结束方法。所以结果为finally。
  1. public class TestD {
  2.         public static void main(String[] args) {
  3.                
  4.         System.out.println(ex());
  5.                
  6.         }
  7.         public static String  ex(){
  8.                 String a = "null";
  9.                 try{
  10.                        
  11.                         throw new Exception();
  12.                
  13.                 }catch (Exception e){
  14.                         a = "catch";
  15.                         return a;
  16.                        
  17.                 }finally {
  18.                         a="finally";
  19.                        
  20.                 }
  21.         }
  22. }
复制代码

在这段代码中执行顺序是首先,主函数调用方法ex();然后执行try语句,抛出一个异常,异常被catch捕获,执行catch中的语句,执行完a = "catch";之后,a 的值变为catch,然后发现下一条语句是return,直接执行finally语句,然后执行a=“finally”;执行之后执行catch中的return,这里请注意,这里返回的是catch中的a值,也就是返回值是catch,原因是当执行到程序return语句时,发现是返回语句,但是finally必须被执行,所以这里return语句被暂停,执行finally语句,执行完之后,返回暂停的语句,所以这里的a值并没有被改变,只是执行的时间不同。还是catch。
作者: Lex    时间: 2014-6-3 11:22
说的比较详细了不错;P
作者: Hi天天向上    时间: 2014-6-3 12:54
恩 好贴 又弄懂了一个问题


作者: 。面具小丑    时间: 2014-6-3 13:12
受教了 一直搞不懂
作者: tangchuanping    时间: 2014-6-3 17:46
说的不错,学习了
作者: 阿苏勒    时间: 2014-6-3 17:49
受教了,finally中的语句都在return语句前面执行
作者: dede668    时间: 2014-6-3 21:35
很不错,受教了
作者: Ice丶wj    时间: 2014-6-3 21:55
很好,很牛逼
作者: Boiled_Water    时间: 2014-6-3 22:08
受教了,值得学习
作者: 北雁南飞    时间: 2014-6-3 22:16
恩恩 讲解的很透彻,只是我还有一个疑问:finally和return,到底是谁先执行呢?照你这么分析,是finally先执行对吧?
作者: pk49800    时间: 2014-6-3 22:18
模拟的很详细




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