try catch 的一些总结
1、不管有木有出现异常,finally块中代码都会执行;
2、当try和catch中有return时,finally仍然会执行;
3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;注意!!!:这里的返回值是基本类型的值。如果是list,map,自定义类等引用类型时,是影响返回结果的
4、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。
对于第三点,写两个代码来让大家更加清楚。
1. finally修改的基本类型是不影响返回结果的:
public int test1(){
int i = 1;
try {
i++;
return i;
}finally{
++i;
}
}
//这段代码输出的结果是 22. 修改list ,map,自定义类等引用类型时,是影响返回结果的。
public List<String> test2(){
List<String> items = new ArrayList<String>();
items.add("aa");
items.add("bb");
try{
items.add("cc");
return items;
}finally{
items.add("finally");
}
}
//这段代码输出的结果是 [aa, bb, cc, finally]