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的影响
updatedupdated2024-08-302024-08-30