try中的return和finally中的return

我们都知道在try-catch-finally中,try块先执行,如果捕获到异常,则执行catch块,如果没有捕获到异常,那么catch块始终不执行,在catch块执行完之后,finally块最后执行。
则那么问题来了(假设都没有捕获异常)
1,如果try块中有return语句,那么finally会执行吗?
答案:会(实践在后面)

2,如果finally块中改变了try块中的return语句要返回的值,那么返回值会改变吗?
答案:不会(实践在后面)

3,如果finally块中有return语句,那么函数会通过try块中的return返回还是通过try块中的return返回?

答案:通过finally块中的return返回。

实践:
写一个简单的类,包含两个方法

public class FinallyReturn {
	public static void main(String[] args) {
		int num = getNum();
		System.out.println("最后返回值是" + num);
	}
	private static int getNum(){
		int num = 4;
		try{
			num = num + 1;
			return num;
		}catch(Exception e) {
			e.printStackTrace();
		}finally{
			System.out.println("finall执行了!");
			num = num + 100;
			System.out.println("finall修改num为:" + num);
		}
		//这句在这里执行不到
		return 0;
	}
}

执行结果图:
在这里插入图片描述
由图可知:try块中有return的时候,finally还是会执行,
返回的结果是5,说明finally块修改了num的值,但是不影响最后的函数返回值。

再来看另外一种情况,和上面代码差不多,只是在finally里面加了一句return num

public class FinallyReturn {
	public static void main(String[] args) {
		int num = getNum();
		System.out.println("最后返回值是" + num);
	}
	private static int getNum(){
		int num = 4;
		try{
			num = num + 1;
			return num;
		}catch(Exception e) {
			e.printStackTrace();
		}finally{
			System.out.println("finall执行了!");
			num = num + 100;
			System.out.println("finall修改num为:" + num);
			return num;
		}
	}
}

来看结果
在这里插入图片描述
由图可知,如果try块与finally块中都有return的时候,函数通过finally块中的return语句返回。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章