问答详情
源自:1-3 Java中通过案例学习 try...catch...finally

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]


提问者:_神人A 2015-09-28 22:24

个回答

  • _Jack_Han_
    2016-01-28 23:21:20

    mark

  • 静静的闹铃
    2015-12-20 16:52:44

    good