finally在return之前执行

 

今年上自习看<<深入java虚拟机>>,有提到虚拟机里有种基本类型:returnAddress,用于实现finally子句.

由此想起以前有看过finally与return执行先后次序的讨论.

小编程序试试...加深印象.

 

 

/*
@author: jarg
http://jarg.iteye.com/
*/
public class Test
{
	public static void main(String[] args)
	{
		System.out.println(test());
	}

	public static String test()
	{
		try
		{
			int i = 2/0;
			System.out.println("error1.");
			return "1";
		}
		catch (Exception e)
		{
			System.out.println("error2.");
			return getValue();
		}
		finally
		{
			System.out.println("error3.");
		}
		//System.out.println("error4.");
	}

	public static String getValue()
	{
		System.out.println("getValue()");
		return "2";
	}
}

 

 

 

结果输出:

 

 

error2.

getValue()

error3.

2

 

解释:

 

 

catch子句中的return子句,会先计算并处理返回值,再判断是否有finally子句.

有则执行finally子句再执行方法返回的操作;否则直接方法返回.

 

 

你可能感兴趣的:(编程,虚拟机)