欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java中try catch finally使用总结

程序员文章站 2022-04-06 16:42:41
...

牢记: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
相关标签: java