try catch finally

例题:如下代码,请问控制台输出和返回值是什么

 public int test(){
        try {
            Integer[] a={1,2,3};
            List<Integer> list= Arrays.asList(a);
            list.add(4);
            System.out.println(0);
            return 0;
        }catch (Exception e){
            System.out.println(1);
        }finally {
            System.out.println(2);
            return 2;
        }
    }

考点:

-1. 数组越界问题
数组a大小为3,往数组里面添加新的元素时,会越界,抛出异常

-2.try catch finally
一.基本概念:

  try{
  //try代码块的内容为要执行的代码,其中可能会有异常
  }catch{
  //try代码块发现异常跳转到catch,否则不执行catch块finally//无论什么情况下都会执行finally中的内容

二.注意事项:

  • 1.异常处理块中只有try是必须的,没有try也没有后面的catch和finally
    2.catch和finally可以只有一个,也可以同时出现,但是不能同时没有 ps. try finally的组合通常会导致异常丢失,不常见
    3.可以有多个catch块,捕获父类异常的块必须在子类后面
    4.catch必须在try后面,finally必须在catch后面

三.try catch finally return 的执行顺序

 public int test(){
        int c=0;
        try {
            Integer[] a={1,2,3};
            List<Integer> list= Arrays.asList(a);
            list.add(4);
            System.out.println("无异常");
            return c++; 
            //无异常时,该return会执行,但不会返回,最终会返回finally中的return
        }catch (Exception e){
            System.out.println("有异常");
            return ++c;
        }finally {
            System.out.println("最终");
          return ++c;
          //把return去掉,改成c++会出现什么情况
          //假设无异常,return返回c++,此时renturn的值就会被保存,即使finally中对c的值进行改变,也不会影响return的值。
        }
    }

总结:

  • 若finally中有return语句,则无论是否有异常,try catch中是否有return,最终返回值都是finally中return的值
  • finally中没有return,则返回的是try/catch中的return语句
  • 假设return的是变量(finally中没有return语句),最终返回的值不会受finally中的语句的影响,返回值在执行完try/catch后就会被保存,不受finally的影响,但finally可以改变该变量的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值