关于return和finally的一些细节。

finally是在return前仍是return后呢?

测试1:

先看一段代码:java

这个是方法类:函数

//方法类
public class test11 {
	public int test1(){
		int x=1;
		try{
			return x; //返回x
		}catch(Exception e){
			return 9999;//随便返回,不写报错
		}finally{
			++x;//x自加
		}
		
		
	}
	
}

测试类:测试

public class Mytest {
	public static void main(String[] args) {
		System.out.println(new test11().test1());
	}
}

-----------------控制台输出:------------------spa

 

这段代码能说出,最起码 finally 是在 return 以后才进行的,不然 ++i 就会变成2。code

可是这么说又不彻底准确,或者说细节没有考虑周全。io

测试2:

请看下面一段代码:class

方法代码:test

public class test11 {
	//压制警告的注解,不写的话, finally 就会有黄线警告。
	@SuppressWarnings("finally")
	public int test1(){
		int x=1;
		try{
			return x;
		}catch(Exception e){
			return 9999;
		}finally{
			return ++x;
		}
		

	}
	
}

测试代码不变:方法

---------------------控制台输出:---------------------im

 这个例子告诉咱们,严禁的说,实际上是在return 以后(并无出这个方法函数),finally 进行一个 return覆盖了前者。

更加准确的表达:

try 中的 return 语句调用的函数先于 finally 中调用的函数执行,也就是说 return 语句先执行,

finally 语句后执行,因此,返回的结果是2。return 并非让函数立刻返回,而是 return 语

句执行后,将把返回结果放置进函数栈中,此时函数并非立刻返回,它要执行 finally 语 句后才真正开始返回。

相关文章
相关标签/搜索