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子句再执行方法返回的操作;否则直接方法返回.

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值