try finally中return的执行顺序

看代码吧,容易懂点。

public class Try {
	public static void main(String[] args) {
		System.out.println("最终结果:" + aa());
	}
 
	public static int aa() {
		int a = 1;
		try {
			System.out.println("try:" + a);
 
			throw new Exception();
			//return a;
		} catch (Exception e) {
			a = 2;
			System.out.println("catch:" + a);
			return a;
		} finally {
			a = 3;
			System.out.println("finally:" + a);
			//return编辑器会提示finally block does not complete normally
			return a;
		}
	}
 
}
 
//运行结果:
/*
try:1
catch:2
finally:3
最终结果:3
*/

可以把上面的代码注释一部分。试试注释掉抛出的错误。以及各个return。

结论

  1. finally始终执行,如果在finally中有return,始终返回这个值
  2. 当不抛错和在try中return a ,finally中没有return语句时, try 的 return 方法会先执行,finally的方法最后执行,然后再返回到主方法。此时最终结果是1
  3. finally中的return优先级最高,最终结果是3
  4. return的值会保存下来,不受到后面finally的影响



fatkun

19条评论

//用这个可以测试出当try块无异常时,返回的是try块的return,但finally块依然会执行,
//finally块后面的代码就不会被执行!如果finally块存在return,那么finally块的return
//会抢夺try块和catch块的return,并使finally块后面的代码无效!catch块存在return也
//会使finally块后面的代码无效!
public class Try {
public static void main(String[] args) {
System.out.println(“最终结果:”+test());
}
private static int test() {
int i = 10;
try {
System.out.println(“try:” + i);
i+=10;
if(i>100)throw new Exception();
return i;
} catch (Exception e) {
i = 40;
System.out.println(“catch:” + i);
}
finally{
i = 80;
System.out.println(“finally:” + i);
}
i = 100;
System.out.println(“last:” + i);
return i;
}
}

如果finally块中没有return,finally块的代码仍然执行的,只是返回值不会改变而已。

发表评论

电子邮件地址不会被公开。