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解析,后续用到的变量均为基本数据类型
- 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
总结
- finally代码块一定会执行
- 当finally中没有return时,try或者catch哪一个有return,都会先把这个值存起来,然后走finally。如果是基本数据类型,那么怎么修改,都不影响已经存起来的返回值,如果是引用类型那么就要注意,很可能会修改值
- 当finally有返回值时,直接忽略try/catch中的return
上一篇: Redis应用场景
下一篇: try—catch—finally的使用