java 中的各种奇怪的执行顺序之异常篇

try{
statement1;
} 
catch(ExceptionType1 e1){
  statement2;
} catch(ExceptionType2 e2){

statement3;

}finally{
statement4;
}

情况讨论:

  • 1,statement1 抛出异常e,如果e是e1类型或子类型,那么就会进入 statement2,不会进入 statement3,如果 statement2 含return,那么会先进入finally,再执行return(如果statement4中含return,那么只会执行这个return);

测试代码:


    public static String test001(int a) {
        try {
          if(a==1){
              throw new Exception();
          }
            return "try block";

        } catch (Exception e) {

            System.out.println(" catch block");
            return "catch return";
        } finally {
            System.out.println(" finally block");
            return " finally return";
        }
    }
 public static void main(String[] args) {
        System.out.println("main:"+test001(1));
        }

输出:
在这里插入图片描述

  1. 未抛出异常,如果statement1 有return,那么先进入finally再进入statement1的return (如果finally 有return 那么只能进入finally的return)
    测试代码:
public class TryCatch {
    public static void main(String[] args) {
        System.out.println("main:" + test002());
    }

    public static String test002() {
        try {

            return "try block";

        } catch (Exception e) {

            System.out.println(" catch block");
        } finally {
            System.out.println(" finally block");
//            return " finally return";
        }

        return "result";
    }
}

效果:finally不含return
在这里插入图片描述finally 含return:

在这里插入图片描述

总结

  • try 通常与catch连用,但是并不一定需要与catch连用
    可以是try{}finally{}
  • try {}catch(){ExceptionType1 e1}catch(ExceptionType e2){},如果抛出的异常不是ExceptionType1类型或者其子类型,那么就交给下一个catch处理(继续判断类型)
  • return 只会执行一次.如果finally有return,那么只会执行这个return
  • finally 中没有return,try 或者catch有return,那么需要先执行try,catch,然后finally,最后执行对应的return
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值