try...catch...finally中的return执行顺序

来源:互联网 发布:淘宝店标logo 编辑:程序博客网 时间:2024/05/13 07:53
try....catch...finally中return的执行顺序
代码:

//packagehello;
publicclass FinallyDemo {
     publicstatic void main(String[]args) {
         System.out.println("main"+ demo());
     }
     
     publicstatic int demo() {
         inta = 10;
         try{
              // double b = 10;
              // double c = b / 0;
              intb = 10;
              intc =b / 0;
              System.out.println("to catch");
         }catch(Exceptione) {
              System.out.println("catch:"+ a);
              return++a;
         }finally {
              System.out.println("finally:"+ a);

              a+= 2;
              
         }
         returna;
     }
}
上面代码的特点是出现try... catch... finally语句中,catch代码块中有return,return语句中有运算,同时finally对catch的return语句中的同一个变量进行了运算。
最后的在main方法中输出的a是11
执行的过程是:
1、catch中return ++a;语句中的++a执行,a=11
2、finally执行,显示a=13,
3、catch中的return执行,main中显示的结果是11

也就是说catch中先执行return的变量的运算,然后执行finally同时finally中对同一个变量的运算不影响最后返回的结果,执行了finally代码块之后,执行return,显示的结果是之前运算的结果。
如果finally中有return语句,那么,catch中的return不再生效,返回的结果是finally中的结果

*除数是0的情况
上面代码用的int,这样会产生错误,如果类型为double这样的浮点数,那么,并不会报错,结果是infinity也就是无穷大。

原创粉丝点击