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; } } //这段代码输出的结果是 2
2. 修改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]