为了账号安全,请及时绑定邮箱和手机立即绑定

基于JAVA学习--异常总结

标签:
Java

学习课程《JAVA入门第三季》
网址:http://www.imooc.com/video/3069


课程中使用到的代码:

//外部类
public class HelloWorld {

 public static void main(String[] args) {   
     HelloWorld b=new HelloWorld();   
    int a= b.test();
    System.out.println(a); 
  //s  b.test2();   
   // this.printI;
  }   

// @SuppressWarnings("finally")
public int test(){
int d=0,r=100;
try{while(d>-2){
System.out.println(d);
r=r+100/d;
d--;
return 11111;
}
}catch(Exception e){
e.printStackTrace();
System.out.println("循环抛出异常了");
// return 22222;
}
finally{
System.out.println("我是finally");
// return 33333;
}
System.out.println("test方法正常执行完毕");
return 44444;
}
}

情况1:try{} catch(){}finally{} return;
有无报错都按顺序执行。返回的都是return的值;

情况2:try{} catch(){}finally{ return }
有无报错都按顺序执行。返回的都是return的值;

情况3:try{ return; }catch(){} finally{return;}
有异常情况时:
1) 如果第一次循环就没有报错了时候,程序执行try块中return之前(包括return语句中的表达式运算)代码,此时退出是因为块中有return;再执行finally块,因为finally块中有return所以提前退出。返回的是finally下的return值
2) 如果第一次循环就已经报错了的时候,程序执行try块中return之前(包括return语句中的表达式运算)代码,此时退出是因为异常,执行catch块;再执行finally块,返回的是finally下的return值
无异常情况时:
Try, finally,返回的是finally下的return值

情况4:try{ return; }catch(){} finally{} return;
无异常情况:
程序执行try块中return之前(包括return语句中的表达式运算)代码;
再执行finally块,finally块之后的语句return,因为程序在try中已经return所以不再执行。返回的是try中的return;
有异常情况:
1) 如果第一次循环就已经报错了的时候,代码没有执行到try中的return,就会执行catch块,再finally,返回最后一个的return;
2) 如果第一次循环就没有报错了时候,程序执行try块中return之前的代码,再执行finally,返回的是try中的return;

情况5:try{ return;}catch(){return;} finally{return;}
程序执行try块中return之前(包括return语句中的表达式运算)代码;
有异常:
1) 如果第一次循环就没有报错了时候,执行catch块中return之前(包括return语句中的表达式运算)代码;则再执行finally块,因为finally块中有return所以提前退出。返回的是finally下的return值
2) 如果第一次循环就已经报错了的时候,执行catch块中return之前(包括 return语句中的表达式运算)代码;则再执行finally块,因为finally块中有return所以提前退出。返回的是finally下的return值
无异常:则再执行finally块,因为finally块中有return所以提前退出。返回的是finally下的return值

情况6:try{ return;} catch(){return;} finally{} return;
程序先执行try
有异常:
1) 如果第一次循环就没有报错了时候,则再执行finally块,因为finally块中有return所以提前退出。返回的是try中的return;
2) 如果第一次循环就已经报错了的时候,执行catch块中return之前(包括 return语句中的表达式运算)代码;则再执行finally块,最后返回的是catch下的return值
无异常:执行完try再finally再return. 返回的是try中的return;

情况7:try{} catch(){return;}finally{return;}
程序先执行try
有异常情况时:
无论是否循环的第一次执行,都先执行catch块中return之前(包括return语句中的表达式运算)代码;
再执行finally块,返回的是finally下的return值
无异常情况时:
执行finally块,因为finally块中有return所以提前退出。返回的是finally下的return值

情况8:try{ } catch(){return;} finally{} return;
程序先执行try
有异常:
无论是否循环的第一次执行,都先执行catch中return之前(包括return语句中的表达式运算)代码,再执行finally语句中全部代码,最后执行catch块中return. finally之后也就是4处的代码不再执行。返回的是catch中的return
无异常:
执行完try再finally再return. 返回最后一个的return;

总结:

  1. try和finally,一定会被执行,但 catch和last不一定会执行,finally下的有return的值,则返回的是finally下的有return的值;
  2. 其他情况都是第一次遇见return遇见谁就执行谁的return
  3. 按照执行顺序就是try ,catch,finally,last
  4. return只能是块中的最后位置
  5. finally块中的return和最后的return是不能并存的
  6. try和catch中的return不能单独使用,try也不能和catch一起使用,必须搭配finally或者last一起使用

结论:
遵循前三条总结,可以准确把握异常返回值的结果
遵循后三条总结,可以穷尽return中的位置。

心得:
若不能亲手测试总结,结论总是别人的。

以上。

点击查看更多内容
3人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消