今年上自习看<<深入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子句再执行方法返回的操作;否则直接方法返回.