java中try catch finally使用总结

牢记:finally代码块是一定要执行的

1. try中有return

public static int demo01(){
        int a =10;
        try{
            return a;
        }catch (Exception e){
            a=20;
        }finally {
            a=30;
        }
        return a;
    }
  //a=10

try中代码有return,即使在finally中,修改了a的值,但是在执行finally代码块之前,try中的return已经记录了要返回的10,finally中没有return,修改也没关系(因为这是a是基本数据类型)

public static ArrayList<Integer> demo02(){
        ArrayList<Integer> numList=new ArrayList<>();
        try{
            numList.add(1);
            return numList;
        }catch (Exception e){
            numList.add(2);
        }finally {
            numList.add(3);
        }
        return numList;
    }
 //[1, 3]

这是numList是引用类型,因为在finally中有增加元素,返回的列表中就增加了

为了重点突出,try/catch/finally解析,后续用到的变量均为基本数据类型

  1. try catch 中都有return
public static int demo03(){
        int a=10;
        try {
            return a/0;
        }catch (Exception e){
            a=20;
            return 20;
        }finally {
            a=30;
        }
    }
 //20

try中代码出现了异常(0不能当作被除数),所以走到了catch,20赋值给了a,走到了return,发现有finall有代码,继续执行,虽然修改了a的值,没有发现return,所以还是返回了20

3. finally中也加了return

 public static int demo04(){
        int a=10;
        try {
            return a/0;
        }catch (Exception e){
            a=20;
            return 20;
        }finally {
            a=30;
            return a;
        }
    }
 //30

那么经过上面的分析,这个返回30,没有任何毛病,因为finally中有return,那么会直接忽略try/catch中的return

总结

  1. finally代码块一定会执行
  2. 当finally中没有return时,try或者catch哪一个有return,都会先把这个值存起来,然后走finally。如果是基本数据类型,那么怎么修改,都不影响已经存起来的返回值,如果是引用类型那么就要注意,很可能会修改值
  3. 当finally有返回值时,直接忽略try/catch中的return
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值